Start commiting the minimessage stuff
This commit is contained in:
parent
eace73938b
commit
b03c2ea220
3 changed files with 101 additions and 30 deletions
19
src/conf.c
19
src/conf.c
|
@ -101,6 +101,14 @@ cfg_opt_t modules[] = {
|
|||
CFG_END()
|
||||
};
|
||||
|
||||
cfg_opt_t neonet[] = {
|
||||
CFG_STR ("HostName", "mqpool.neostats.net", CFGF_NONE),
|
||||
CFG_INT ("Port", 2960, CFGF_NONE),
|
||||
CFG_STR ("UserName", 0, CFGF_NONE),
|
||||
CFG_STR ("Password", 0, CFGF_NONE),
|
||||
CFG_END()
|
||||
};
|
||||
|
||||
cfg_opt_t fileconfig[] = {
|
||||
CFG_SEC ("ServerConfig", server_details, CFGF_NONE),
|
||||
CFG_SEC ("Options", options, CFGF_NONE),
|
||||
|
@ -112,6 +120,7 @@ cfg_opt_t fileconfig[] = {
|
|||
#endif /* 0 */
|
||||
CFG_SEC ("ServiceRoot", serviceroot, CFGF_NONE),
|
||||
CFG_SEC ("Modules", modules, CFGF_NONE),
|
||||
CFG_SEC ("NeoNet", neonet, CFGF_NONE),
|
||||
CFG_END()
|
||||
};
|
||||
|
||||
|
@ -128,7 +137,8 @@ validate_args arg_validate[] = {
|
|||
{"Options|NOLOAD", &cb_noload},
|
||||
{"Servers|IpAddress", &cb_verify_host},
|
||||
{"ServiceRoot|Mask", &cb_verify_mask},
|
||||
{"Modules|ModuleName", &cb_verify_file}
|
||||
{"Modules|ModuleName", &cb_verify_file},
|
||||
{"NeoNet|HostName", &cb_verify_host}
|
||||
};
|
||||
|
||||
/** @brief ConfParseError
|
||||
|
@ -260,6 +270,13 @@ static int set_config_values( cfg_t *cfg )
|
|||
dlog( DEBUG6, " %s", cfg_getnstr( cfg, "Modules|ModuleName", i ));
|
||||
}
|
||||
dlog( DEBUG6, "-----------------------------------------------" );
|
||||
printf("%d\n", cfg_size(cfg, "NeoNet|UserName"));
|
||||
if (cfg_size(cfg, "NeoNet|UserName") > 1)
|
||||
strlcpy(mqs.username, cfg_getstr(cfg, "NeoNet|UserName"), MAXUSER);
|
||||
if (cfg_size(cfg, "NeoNet|Password") > 1)
|
||||
strlcpy(mqs.password, cfg_getstr(cfg, "NeoNet|Password"), MAXUSER);
|
||||
strlcpy(mqs.hostname, cfg_getstr(cfg, "NeoNet|HostName"), MAXHOST);
|
||||
mqs.port = cfg_getint(cfg, "NeoNet|Port");
|
||||
return NS_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -608,7 +608,6 @@
|
|||
"my $callback = shift;\n"
|
||||
"my ($package) = caller;\n"
|
||||
"$callback = NeoStats::Embed::fix_callback( $package, $callback );\n"
|
||||
"NeoStats::debug(\"Callback is $callback\");\n"
|
||||
"return NeoStats::Internal::AddTimer($type, $name, $interval, $callback);\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
|
|
111
src/updates.c
111
src/updates.c
|
@ -25,19 +25,33 @@
|
|||
*/
|
||||
|
||||
#include "neostats.h"
|
||||
#include "event.h"
|
||||
#include "MiniMessage.h"
|
||||
#include "MiniMessageGateway.h"
|
||||
|
||||
|
||||
void GotUpdateAddress(void *data, adns_answer *a);
|
||||
static int mqswrite(int fd, void *data);
|
||||
static int mqsread(void *data, void *notused, size_t len);
|
||||
int mqs_login();
|
||||
|
||||
updateserver mqs;
|
||||
MMessageGateway *mqsgw;
|
||||
|
||||
int MQSSendSock(const char * buf, uint32 numBytes, void * arg) {
|
||||
return os_sock_write(mqs.sock, buf, numBytes);
|
||||
}
|
||||
|
||||
struct updateserver {
|
||||
int ok;
|
||||
struct sockaddr_in sendtomq;
|
||||
OS_SOCKET sock;
|
||||
} mqs;
|
||||
|
||||
int InitUpdate(void)
|
||||
{
|
||||
mqs.ok = 0;
|
||||
dns_lookup( "mqpool.neostats.net", adns_r_a, GotUpdateAddress, NULL );
|
||||
mqs.state = MQS_DISCONNECTED;
|
||||
mqsgw = MGAllocMessageGateway();
|
||||
if (!mqsgw) {
|
||||
nlog(LOG_WARNING, "Couldn't allocate MiniMessageGateway Object");
|
||||
return NS_FAILURE;
|
||||
}
|
||||
dns_lookup( mqs.hostname, adns_r_a, GotUpdateAddress, NULL );
|
||||
dlog(DEBUG1, "Updates Initialized successfully");
|
||||
return NS_SUCCESS;
|
||||
}
|
||||
|
@ -48,34 +62,75 @@ void FiniUpdate(void)
|
|||
|
||||
void GotUpdateAddress(void *data, adns_answer *a)
|
||||
{
|
||||
char *url;
|
||||
int i, len, ri;
|
||||
|
||||
struct timeval tv;
|
||||
SET_SEGV_LOCATION();
|
||||
adns_rr_info(a->type, 0, 0, &len, 0, 0);
|
||||
for(i = 0; i < a->nrrs; i++) {
|
||||
ri = adns_rr_info(a->type, 0, 0, 0, a->rrs.bytes +i*len, &url);
|
||||
if (!ri) {
|
||||
/* ok, we got a valid answer, lets maybe kick of the update check.*/
|
||||
mqs.sendtomq.sin_addr.s_addr = inet_addr(url);
|
||||
mqs.sendtomq.sin_port = htons(2335);
|
||||
mqs.sendtomq.sin_family = AF_INET;
|
||||
mqs.sock = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
mqs.ok = 1;
|
||||
nlog (LOG_NORMAL, "Got DNS for MQ Pool Server: %s", url);
|
||||
} else {
|
||||
nlog(LOG_WARNING, "DNS error Checking for MQ Server Pool: %s", adns_strerror(ri));
|
||||
}
|
||||
ns_free (url);
|
||||
if( a && a->nrrs > 0 && a->status == adns_s_ok ) {
|
||||
mqs.sock = sock_connect(SOCK_STREAM, a->rrs.addr->addr.inet.sin_addr, mqs.port);
|
||||
if (mqs.sock > 0) {
|
||||
tv.tv_sec = 30;
|
||||
AddSock(SOCK_NATIVE, "MQS", mqs.sock, mqsread, mqswrite, EV_WRITE|EV_TIMEOUT, NULL, &tv);
|
||||
mqs.state = MQS_CONNECTING;
|
||||
}
|
||||
nlog (LOG_NORMAL, "Got DNS for MQ Pool Server: %s", inet_ntoa(a->rrs.addr->addr.inet.sin_addr));
|
||||
} else {
|
||||
nlog(LOG_WARNING, "DNS error Checking for MQ Server Pool: %s", adns_strerror(a->status));
|
||||
}
|
||||
if (a->nrrs < 1) {
|
||||
nlog(LOG_WARNING, "DNS Error checking for MQ Server Pool");
|
||||
}
|
||||
|
||||
int mqswrite(int fd, void *data) {
|
||||
switch (mqs.state) {
|
||||
case MQS_DISCONNECTED:
|
||||
break;
|
||||
/* we are connected */
|
||||
case MQS_CONNECTING:
|
||||
return mqs_login();
|
||||
break;
|
||||
case MQS_SENTAUTH:
|
||||
case MQS_OK:
|
||||
/* ask MiniMessageGateway to write any buffer out */
|
||||
break;
|
||||
}
|
||||
return NS_FAILURE;
|
||||
}
|
||||
|
||||
int mqsread(void *data, void *notused, size_t len) {
|
||||
|
||||
return NS_SUCCESS;
|
||||
}
|
||||
|
||||
int mqs_login()
|
||||
{
|
||||
MMessage *msg = MMAllocMessage(0);
|
||||
MByteBuffer **username;
|
||||
MByteBuffer **password;
|
||||
MByteBuffer **version;
|
||||
if (!msg) {
|
||||
nlog(LOG_WARNING, "Warning, Couldn't create MiniMessage");
|
||||
return NS_FAILURE;
|
||||
}
|
||||
username = MMPutStringField(msg, false, "username", 1);
|
||||
username[0] = MBStrdupByteBuffer(mqs.username);
|
||||
password = MMPutStringField(msg, false, "password", 1);
|
||||
password[0] = MBStrdupByteBuffer(mqs.password);
|
||||
version = MMPutStringField(msg, false, "version", 1);
|
||||
version[0] = MBStrdupByteBuffer(me.version);
|
||||
MMSetWhat(msg, MAKETYPE("login\0"));
|
||||
#ifdef DEBUG
|
||||
MMPrintToStream(msg);
|
||||
#endif
|
||||
MGAddOutgoingMessage(mqsgw, msg);
|
||||
MMFreeMessage(msg);
|
||||
|
||||
MGDoOutput(mqsgw, ~0, MQSSendSock, NULL);
|
||||
|
||||
mqs.state = MQS_SENTAUTH;
|
||||
|
||||
return NS_SUCCESS;
|
||||
}
|
||||
void sendtoMQ( MQ_MSG_TYPE type, void *data, size_t len) {
|
||||
char *buf;
|
||||
|
||||
if (mqs.ok == 1) {
|
||||
if (mqs.state == MQS_OK) {
|
||||
/* for now, we know that data is always a char string */
|
||||
buf = malloc(sizeof(int) + len);
|
||||
ircsnprintf(buf, (sizeof(int)+len+1), "%d\n%s", type, (char *)data);
|
||||
|
|
Reference in a new issue