[NeoStats-Devel] [Commits] r2844 - trunk/src
[email protected] Thu, 29 Sep 2005 17:58:06 +1000
| Newsgroups | gmane.comp.neostats.devel |
|---|---|
| Message-ID | <[email protected]> |
Author: Fish
Date: Thu Sep 29 15:57:59 2005
New Revision: 2844
Modified:
trunk/src/conf.c
trunk/src/neostats.pm.h
trunk/src/updates.c
Log:
Start commiting the minimessage stuff
Modified: trunk/src/conf.c
==============================================================================
--- trunk/src/conf.c (original)
+++ trunk/src/conf.c Thu Sep 29 15:57:59 2005
@@ -101,6 +101,14 @@
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 @@
#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 @@
{"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 @@
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;
}
Modified: trunk/src/neostats.pm.h
==============================================================================
--- trunk/src/neostats.pm.h (original)
+++ trunk/src/neostats.pm.h Thu Sep 29 15:57:59 2005
@@ -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"
Modified: trunk/src/updates.c
==============================================================================
--- trunk/src/updates.c (original)
+++ trunk/src/updates.c Thu Sep 29 15:57:59 2005
@@ -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 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);