func (m *AllJoynMessenger) forwardAllJoynMessage(msgId uint32) (err error) { log.Printf("****forwardAllJoynMessage****") msg := C.Get_AJ_Message() reply := C.Get_AJ_ReplyMessage() var data uintptr var actual C.size_t b := make([]byte, 0) signature := C.GoString(C.Get_AJ_Message_signature()) bodyLen := C.Get_AJ_Message_bodyLen() for i := 0; i < int(bodyLen); i++ { status := C.AJ_UnmarshalRaw((*C.AJ_Message)(msg), (*unsafe.Pointer)(unsafe.Pointer(&data)), C.size_t(1), (*C.size_t)(unsafe.Pointer(&actual))) if status == C.AJ_OK { b = append(b, C.GoBytes(unsafe.Pointer(data), C.int(actual))...) // log.Printf("Reading RAW message, status = %d, actual = %d", status, actual) } else { log.Printf("Error while reading message body, status = %d", status) break } } s, err := dbus.ParseSignature(signature) if err != nil { log.Printf("Error parsing signature: %s", err) return err } d := dbus.NewDecoder(bytes.NewReader(b), binary.LittleEndian) res, err := d.Decode(s) if err != nil { log.Printf("Error decoding message [%+v] : %s", b, err) return err } //log.Printf("Received application alljoyn message, signature: %s, bytes: %+v, decoded: %+v", signature, b, res) objPath := C.GoString(C.Get_AJ_Message_objPath()) member := C.GoString(C.Get_AJ_Message_member()) destination := C.GoString(C.Get_AJ_Message_destination()) iface := C.GoString(C.Get_AJ_Message_iface()) log.Printf("****Message [objPath, member, iface, destination]: %s, %s, %s, %s", objPath, member, iface, destination) for _, service := range m.binding { if service.allJoynPath == objPath { log.Printf("Found matching dbus service: %+v", service) C.AJ_MarshalReplyMsg((*C.AJ_Message)(msg), (*C.AJ_Message)(reply)) m.callRemoteMethod((*C.AJ_Message)(reply), service.dbusPath, iface+"."+member, res) C.AJ_DeliverMsg((*C.AJ_Message)(reply)) break } } return nil }
func dumpMessage() string { objPath := safeString(C.Get_AJ_Message_objPath()) member := safeString(C.Get_AJ_Message_member()) destination := safeString(C.Get_AJ_Message_destination()) iface := safeString(C.Get_AJ_Message_iface()) return fmt.Sprintf("\tPath: %s \r\n\tMember: %s.%s \r\n\tDestination: %s", objPath, iface, member, destination) }
func dumpMessage(prefix string) { msgId := uint32(C.Get_AJ_Message_msgId()) objPath := "" //safeString(C.Get_AJ_Message_objPath()) member := safeString(C.Get_AJ_Message_member()) destination := safeString(C.Get_AJ_Message_destination()) iface := safeString(C.Get_AJ_Message_iface()) log.Printf("%s \r\n\tmsgId: %d \r\n\tobjPath: %s \r\n\tmember: %s \r\n\tiface: %s \r\n\tdestination: %s", prefix, msgId, objPath, member, iface, destination) }