82 ,
const char * stringresult);
103 static NetAddr* nanofailreportaddr = NULL;
105 static guint idle_shutdown_gsource = 0;
122 ,
const char * systemnm
129 DEBUGMSG(
"%s.%d: Ignoring request to send fstype=%d message upstream [%s]."
139 lateframe->
setint(lateframe, howlate);
150 if (systemnm != NULL) {
158 DUMP3(
"nanoprobe_report_upstream", &nanofailreportaddr->
baseclass, NULL);
168 static guint64 last_martian_time = 0;
169 static guint recent_martian_count = 0;
171 const guint64 uS = 1000000;
178 recent_martian_count = 0;
181 last_martian_time = now;
182 ++recent_martian_count;
187 if ((recent_martian_count % 10) == 2) {
192 g_warning(
"System at address %s is sending unexpected heartbeats.", addrstring);
210 g_warning(
"Peer at address %s is dead (has timed out).", addrstring);
239 guint64 mslate = howlate / 1000;
241 g_warning(
"Heartbeat from peer at address %s was "FMT_64BIT"d ms late.", addrstring, mslate);
256 double secsdead = ((double)((howlate+50000) / 100000))/10.0;
258 g_warning(
"Peer at address %s came alive after being dead for %g seconds.", addrstring, secsdead);
284 guint16 sendinterval = 0;
290 g_return_if_fail(fs != NULL);
297 for (slframe = fs->
framelist; slframe != NULL; slframe = g_slist_next(slframe)) {
299 int frametype = frame->
type;
307 sendinterval = (guint16) iframe->
getint(iframe);
310 if (0 == sendinterval) {
344 guint64 deadtime = 0;
345 guint64 warntime = 0;
353 g_return_if_fail(fs != NULL);
361 for (slframe = fs->
framelist; slframe != NULL; slframe = g_slist_next(slframe)) {
363 int frametype = frame->
type;
369 deadtime = iframe->
getint(iframe);
374 warntime = iframe->
getint(iframe);
460 for (slframe = fs->
framelist; slframe != NULL; slframe = g_slist_next(slframe)) {
462 switch(frame->
type) {
489 for (slframe = fs->
framelist; slframe != NULL; slframe = g_slist_next(slframe)) {
491 switch(frame->
type) {
538 char * paramname = NULL;
542 for (slframe = fs->
framelist; slframe != NULL; slframe = g_slist_next(slframe)) {
544 int frametype = frame->
type;
548 paramname = frame->
value;
549 g_return_if_fail(paramname != NULL);
554 g_return_if_fail(paramname != NULL);
562 g_return_if_fail(paramname != NULL);
572 g_return_if_fail(paramname != NULL);
573 cfg->
setaddr(cfg, paramname, addr);
582 if (nanofailreportaddr == NULL) {
587 UNREF(nanofailreportaddr);
590 DUMP3(
"nanoobey_setconfig: nanofailreportaddr", &nanofailreportaddr->
baseclass, NULL);
598 io->
addalias(io, localhost, nanofailreportaddr);
601 REF(nanofailreportaddr);
603 g_message(
"Connected to CMA. Happiness :-D");
619 guint changecount = 0;
624 for (slframe = fs->
framelist; slframe != NULL; slframe = g_slist_next(slframe)) {
626 int frametype = frame->
type;
639 if (changecount == 0) {
685 const char * discoveryname = NULL;
696 for (slframe = fs->
framelist; slframe != NULL; slframe = g_slist_next(slframe)) {
698 int frametype = frame->
type;
703 g_return_if_fail(strf != NULL);
704 g_return_if_fail(discoveryname == NULL);
712 interval = (guint)intf->
getint(intf);
719 const char * jsonstring;
720 g_return_if_fail(strf != NULL);
722 g_return_if_fail(discoveryname != NULL);
723 DEBUGMSG3(
"Got DISCJSON frame: %s %d %s" , discoveryname, interval, jsonstring);
730 discoveryname = NULL;
741 ,
const char * stringresult)
750 const char* framename;
759 for (j=0; j <
DIMOF(pktframes); ++j) {
760 response->
setint(response, pktframes[j].framename, pktframes[j].framevalue);
791 for (slframe = fs->
framelist; slframe != NULL; slframe = g_slist_next(slframe)) {
801 g_warning(
"%s.%d: Received malformed JSON string [%*s]"
823 for (slframe = fs->
framelist; slframe != NULL; slframe = g_slist_next(slframe)) {
833 g_warning(
"%s.%d: Received malformed JSON string [%*s]"
861 for (slframe = fs->
framelist; slframe != NULL; slframe = g_slist_next(slframe)) {
863 int frametype = frame->
type;
868 const char * discoveryname;
869 g_return_if_fail(strf != NULL);
871 g_return_if_fail(discoveryname == NULL);
894 const char* disctype;
900 g_return_if_fail(jsonroot != NULL);
901 disctype = jsonroot->
getstring(jsonroot,
"type");
902 g_return_if_fail(disctype != NULL);
904 , transport, config, 0);
926 static enum istate {INIT=3, WAIT=5, DONE=7} state = INIT;
934 const char * jsontext =
"{\"parameters\":{}}";
969 const char * jsontext;
970 char * sysname = NULL;
978 g_return_val_if_fail(cmainit != NULL, FALSE);
998 jsontext = context->
getstring(context, cfgname);
1010 DEBUGMSG(
"%s.%d: Sent initial STARTUP frameset for %s."
1012 g_free(sysname); sysname = NULL;
1098 cruftiness = initcrufty;
1107 , g_main_context_default(), io, config, 0);
1127 g_info(
"%-35s %8"G_GINT64_MODIFIER
"d",
"Count of recvfrom calls:", ts->
recvcalls);
1128 g_info(
"%-35s %8"G_GINT64_MODIFIER
"d",
"Count of pkts read:", ts->
pktsread);
1129 g_info(
"%-35s %8"G_GINT64_MODIFIER
"d",
"Count of framesets read:", ts->
fsreads);
1130 g_info(
"%-35s %8"G_GINT64_MODIFIER
"d",
"Count of sendto calls:", ts->
sendcalls);
1131 g_info(
"%-35s %8"G_GINT64_MODIFIER
"d",
"Count of pkts written:", ts->
pktswritten);
1132 g_info(
"%-35s %8"G_GINT64_MODIFIER
"d",
"Count of framesets written:", ts->
fswritten);
1133 g_info(
"%-35s %8"G_GINT64_MODIFIER
"d",
"Count of reliable framesets sent:", ts->
reliablesends);
1134 g_info(
"%-35s %8"G_GINT64_MODIFIER
"d",
"Count of reliable framesets recvd:", ts->
reliablereads);
1135 g_info(
"%-35s %8"G_GINT64_MODIFIER
"d",
"Count of ACKs sent:", ts->
ackssent);
1136 g_info(
"%-35s %8"G_GINT64_MODIFIER
"d",
"Count of ACKs recvd:", ts->
acksrecvd);
1145 if (nanofailreportaddr) {
1146 UNREF(nanofailreportaddr);
1148 if (nanotransport) {
1149 g_source_destroy(
CASTTOCLASS(GSource, nanotransport));
1150 g_source_unref(
CASTTOCLASS(GSource, nanotransport));
1151 nanotransport = NULL;
1171 DEBUGMSG(
"Sending HBSHUTDOWN to CMA");
1174 g_free(sysname); sysname = NULL;
1183 g_warning(
"%s: Never connected to CMA - cannot send shutdown message.",
procname);
1198 DEBUGMSG(
"%s.%d: Shutting down - all connections closed."
1210 DEBUGMSG(
"Initiating final shutdown");
1212 g_warning(
"Shutting down with unACKed output.");
1215 if (idle_shutdown_gsource) {
1216 g_source_remove(idle_shutdown_gsource);
1217 idle_shutdown_gsource = 0;