diff --git a/CallCapture/CallCapture.cpp b/CallCapture/CallCapture.cpp index c82befa..a04e9e5 100644 --- a/CallCapture/CallCapture.cpp +++ b/CallCapture/CallCapture.cpp @@ -117,6 +117,7 @@ int main(int argc, const char* argv[]) if (number == 0) number = unknown; proxy.setTalkerID(number); + proxy.setTalkerAlias(call); syslog(LOG_INFO, "*** Found call-sign: %s (ID: %d)", call, number); pcre_free_substring(call); diff --git a/CallCapture/PatchCordProxy.cpp b/CallCapture/PatchCordProxy.cpp index 88bdd6a..2e0e94f 100644 --- a/CallCapture/PatchCordProxy.cpp +++ b/CallCapture/PatchCordProxy.cpp @@ -17,6 +17,7 @@ // From PatchCord.h #define VALUE_CORD_OUTGOING_SOURCE_ID 1 #define VALUE_CORD_INCOMING_SOURCE_ID 4 +#define VALUE_CORD_TALKER_ALIAS 7 PatchCordProxy::PatchCordProxy(uint32_t network, uint32_t link) { @@ -45,6 +46,26 @@ uint32_t PatchCordProxy::getTalkerID() return getSpecificValue(VALUE_CORD_INCOMING_SOURCE_ID); } +void PatchCordProxy::setTalkerAlias(const char* value) +{ + size_t length = strlen(value); + const uint32_t* data = (const uint32_t*)value; + + size_t index = VALUE_CORD_TALKER_ALIAS; + size_t count = + (length / sizeof(uint32_t)) + + ((length % sizeof(uint32_t)) > 0); + + getContextBanner(); + while (count > 0) + { + setSpecificValue(index, *data); + count --; + index ++; + data ++; + } +} + void PatchCordProxy::getContextBanner() { DBusMessage* message = dbus_message_new_method_call( diff --git a/CallCapture/PatchCordProxy.h b/CallCapture/PatchCordProxy.h index 8b8d398..d477135 100644 --- a/CallCapture/PatchCordProxy.h +++ b/CallCapture/PatchCordProxy.h @@ -14,6 +14,7 @@ class PatchCordProxy ~PatchCordProxy(); void setTalkerID(uint32_t value); + void setTalkerAlias(const char* value); uint32_t getTalkerID(); private: diff --git a/SVXLink/echolink/BrandMeisterBridge.cpp b/SVXLink/echolink/BrandMeisterBridge.cpp index 335a873..c5d6e34 100644 --- a/SVXLink/echolink/BrandMeisterBridge.cpp +++ b/SVXLink/echolink/BrandMeisterBridge.cpp @@ -94,7 +94,7 @@ void BrandMeisterBridge::setTalker(const char* call, const char* name) { // Remove characters after call-sign size_t length = delimiter - call; - char* buffer = (char*)alloca(length + 1); + char* buffer = (char*)alloca(length + sizeof(uint32_t)); strncpy(buffer, call, length); call = buffer; } @@ -105,6 +105,7 @@ void BrandMeisterBridge::setTalker(const char* call, const char* name) syslog(LOG_INFO, "Set talker ID to %d for call-sign %s", number, call); proxy->setTalkerID(number); + proxy->setTalkerAlias(call); } void BrandMeisterBridge::handleChatMessage(const char* text) diff --git a/SVXLink/echolink/PatchCordProxy.cpp b/SVXLink/echolink/PatchCordProxy.cpp index 88bdd6a..2e0e94f 100644 --- a/SVXLink/echolink/PatchCordProxy.cpp +++ b/SVXLink/echolink/PatchCordProxy.cpp @@ -17,6 +17,7 @@ // From PatchCord.h #define VALUE_CORD_OUTGOING_SOURCE_ID 1 #define VALUE_CORD_INCOMING_SOURCE_ID 4 +#define VALUE_CORD_TALKER_ALIAS 7 PatchCordProxy::PatchCordProxy(uint32_t network, uint32_t link) { @@ -45,6 +46,26 @@ uint32_t PatchCordProxy::getTalkerID() return getSpecificValue(VALUE_CORD_INCOMING_SOURCE_ID); } +void PatchCordProxy::setTalkerAlias(const char* value) +{ + size_t length = strlen(value); + const uint32_t* data = (const uint32_t*)value; + + size_t index = VALUE_CORD_TALKER_ALIAS; + size_t count = + (length / sizeof(uint32_t)) + + ((length % sizeof(uint32_t)) > 0); + + getContextBanner(); + while (count > 0) + { + setSpecificValue(index, *data); + count --; + index ++; + data ++; + } +} + void PatchCordProxy::getContextBanner() { DBusMessage* message = dbus_message_new_method_call( diff --git a/SVXLink/echolink/PatchCordProxy.h b/SVXLink/echolink/PatchCordProxy.h index 8b8d398..d477135 100644 --- a/SVXLink/echolink/PatchCordProxy.h +++ b/SVXLink/echolink/PatchCordProxy.h @@ -14,6 +14,7 @@ class PatchCordProxy ~PatchCordProxy(); void setTalkerID(uint32_t value); + void setTalkerAlias(const char* value); uint32_t getTalkerID(); private: