Start commiting the minimessage stuff

This commit is contained in:
Fish 2005-09-29 07:57:59 +00:00
parent eace73938b
commit b03c2ea220
3 changed files with 101 additions and 30 deletions

View file

@ -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;
}

View file

@ -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"

View file

@ -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);