3
Fork 0

Changes for fixed API

This commit is contained in:
R3ABM Artem 2016-04-05 10:10:54 +03:00
parent 3fd17d12c6
commit 83efcf40d7
6 changed files with 18 additions and 142 deletions

View file

@ -1,90 +0,0 @@
// Copyright 2015 by Artem Prilutskiy
#include "BrandMeisterBridge.h"
#include <string.h>
#include <stdlib.h>
#include <syslog.h>
#include <stdio.h>
#define ECHOLINK_DEFAULT_USER_NUMBER 1
#define ECHOLINK_DEFAULT_CORD_NUMBER 10
#define REGISTRY_CONFIGURATION_FILE "/opt/BrandMeister/Registry.cnf"
BrandMeisterBridge::BrandMeisterBridge() :
proxy(ECHOLINK_DEFAULT_CORD_NUMBER),
store(REGISTRY_CONFIGURATION_FILE),
talker(NULL)
{
}
BrandMeisterBridge::~BrandMeisterBridge()
{
free(talker);
}
// Interface methods for ModuleEchoLink
const char* BrandMeisterBridge::getTalker()
{
free(talker);
uint32_t number = proxy.getTalkerID();
char call[LONG_CALLSIGN_LENGTH];
char text[SLOW_DATA_TEXT_LENGTH];
if ((number != 0) &&
(store.getCredentialsForID(number, call, text)))
{
asprintf(&talker, "%s %s", call, text);
return talker;
}
asprintf(&talker, "DMR ID: %d", number);
return talker;
}
void BrandMeisterBridge::setTalker(const char* call, const char* name)
{
if (*call == '*')
{
// Do not process conference call-sign
return;
}
const char* delimiter = strpbrk(call, " -\n");
if (delimiter != NULL)
{
// Remove characters after call-sign
size_t length = delimiter - call;
char* buffer = (char*)alloca(length + 1);
strncpy(buffer, call, length);
call = buffer;
}
uint32_t number = store.getPrivateIDForCall(call);
if (number == 0)
{
syslog(LOG_INFO, "DMR ID for call-sign %s not found", call);
number = ECHOLINK_DEFAULT_USER_NUMBER;
}
syslog(LOG_DEBUG, "Set talker DMR ID to %d", number);
proxy.setTalkerID(number);
}
void BrandMeisterBridge::handleChatMessage(const char* text)
{
// CONF Russian Reflector, Open 24/7, Contacts: rv3dhc.link@qip.ru * Call CQ / Use pauses 2sec * [28/500]
// R3ABM-L *DSTAR.SU DMR Bridge*
// UB3AMO Moscow T I N A O
// ->UA0LQE-L USSURIISK
const char* delimiter;
if ((strncmp(text, "CONF ", 5) == 0) &&
((delimiter = strstr(text, "\n->")) != NULL))
{
const char* call = delimiter + 3;
setTalker(call, NULL);
}
}

View file

@ -1,28 +0,0 @@
// Copyright 2015 by Artem Prilutskiy
#ifndef BRANDMEISTERBRIDGE_H
#define BRANDMEISTERBRIDGE_H
#include "PatchCordProxy.h"
#include "UserDataStore.h"
class BrandMeisterBridge
{
public:
BrandMeisterBridge();
~BrandMeisterBridge();
const char* getTalker();
void setTalker(const char* call, const char* name);
void handleChatMessage(const char* text);
private:
PatchCordProxy proxy;
UserDataStore store;
char* talker;
};
#endif

View file

@ -1,4 +1,4 @@
// Copyright 2015 by Artem Prilutskiy
// Copyright 2015-2016 by Artem Prilutskiy
#include "PatchCordProxy.h"
#include <stdlib.h>
@ -7,9 +7,9 @@
#include <syslog.h>
#include <stdio.h>
#define INTERFACE_NAME "me.burnaway.BrandMeister"
#define SERVICE_NAME INTERFACE_NAME
#define SERVICE_NAME "me.burnaway.BrandMeister"
#define OBJECT_PATH "/me/burnaway/BrandMeister"
#define INTERFACE_NAME "me.burnaway.BrandMeister"
// From AutoPatch.cpp
#define AUTOPATCH_LINK_NAME "AutoPatch"
@ -22,7 +22,7 @@ PatchCordProxy::PatchCordProxy(uint32_t network, uint32_t link)
{
banner = NULL;
number = link;
asprintf(&path, OBJECT_PATH "/%d", network);
asprintf(&name, SERVICE_NAME ".network-%d", network);
connection = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
}
@ -30,7 +30,7 @@ PatchCordProxy::~PatchCordProxy()
{
dbus_connection_unref(connection);
free(banner);
free(path);
free(name);
}
void PatchCordProxy::setTalkerID(uint32_t value)
@ -48,8 +48,7 @@ uint32_t PatchCordProxy::getTalkerID()
void PatchCordProxy::getContextBanner()
{
DBusMessage* message = dbus_message_new_method_call(
SERVICE_NAME, path,
INTERFACE_NAME, "getContextList");
name, OBJECT_PATH, INTERFACE_NAME, "getContextList");
const char* name = AUTOPATCH_LINK_NAME;
@ -84,8 +83,7 @@ void PatchCordProxy::getContextBanner()
void PatchCordProxy::setVendorSpecificValue(uint32_t key, uint32_t value)
{
DBusMessage* message = dbus_message_new_method_call(
SERVICE_NAME, path,
INTERFACE_NAME, "setVendorSpecificValue");
name, OBJECT_PATH, INTERFACE_NAME, "setVendorSpecificValue");
dbus_message_append_args(message,
DBUS_TYPE_STRING, &banner,
@ -111,8 +109,7 @@ void PatchCordProxy::setVendorSpecificValue(uint32_t key, uint32_t value)
uint32_t PatchCordProxy::getVendorSpecificValue(uint32_t key)
{
DBusMessage* message = dbus_message_new_method_call(
SERVICE_NAME, path,
INTERFACE_NAME, "getContextData");
name, OBJECT_PATH, INTERFACE_NAME, "getContextData");
dbus_message_append_args(message,
DBUS_TYPE_STRING, &banner,

View file

@ -19,7 +19,7 @@ class PatchCordProxy
private:
DBusConnection* connection;
char* path;
char* name;
uint32_t number;
char* banner;

View file

@ -1,4 +1,4 @@
// Copyright 2015 by Artem Prilutskiy
// Copyright 2015-2016 by Artem Prilutskiy
#include "PatchCordProxy.h"
#include <stdlib.h>
@ -7,9 +7,9 @@
#include <syslog.h>
#include <stdio.h>
#define INTERFACE_NAME "me.burnaway.BrandMeister"
#define SERVICE_NAME INTERFACE_NAME
#define SERVICE_NAME "me.burnaway.BrandMeister"
#define OBJECT_PATH "/me/burnaway/BrandMeister"
#define INTERFACE_NAME "me.burnaway.BrandMeister"
// From AutoPatch.cpp
#define AUTOPATCH_LINK_NAME "AutoPatch"
@ -22,7 +22,7 @@ PatchCordProxy::PatchCordProxy(uint32_t network, uint32_t link)
{
banner = NULL;
number = link;
asprintf(&path, OBJECT_PATH "/%d", network);
asprintf(&name, SERVICE_NAME ".network-%d", network);
connection = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
}
@ -30,7 +30,7 @@ PatchCordProxy::~PatchCordProxy()
{
dbus_connection_unref(connection);
free(banner);
free(path);
free(name);
}
void PatchCordProxy::setTalkerID(uint32_t value)
@ -48,8 +48,7 @@ uint32_t PatchCordProxy::getTalkerID()
void PatchCordProxy::getContextBanner()
{
DBusMessage* message = dbus_message_new_method_call(
SERVICE_NAME, path,
INTERFACE_NAME, "getContextList");
name, OBJECT_PATH, INTERFACE_NAME, "getContextList");
const char* name = AUTOPATCH_LINK_NAME;
@ -84,8 +83,7 @@ void PatchCordProxy::getContextBanner()
void PatchCordProxy::setVendorSpecificValue(uint32_t key, uint32_t value)
{
DBusMessage* message = dbus_message_new_method_call(
SERVICE_NAME, path,
INTERFACE_NAME, "setVendorSpecificValue");
name, OBJECT_PATH, INTERFACE_NAME, "setVendorSpecificValue");
dbus_message_append_args(message,
DBUS_TYPE_STRING, &banner,
@ -111,8 +109,7 @@ void PatchCordProxy::setVendorSpecificValue(uint32_t key, uint32_t value)
uint32_t PatchCordProxy::getVendorSpecificValue(uint32_t key)
{
DBusMessage* message = dbus_message_new_method_call(
SERVICE_NAME, path,
INTERFACE_NAME, "getContextData");
name, OBJECT_PATH, INTERFACE_NAME, "getContextData");
dbus_message_append_args(message,
DBUS_TYPE_STRING, &banner,

View file

@ -19,7 +19,7 @@ class PatchCordProxy
private:
DBusConnection* connection;
char* path;
char* name;
uint32_t number;
char* banner;