static int post_face_notice(struct ccnr_handle *ccnr, unsigned filedesc) { struct fdholder *fdholder = ccnr_r_io_fdholder_from_fd(ccnr, filedesc); struct ccn_charbuf *msg = ccn_charbuf_create(); int res = -1; int port; // XXX - text version for trying out stream stuff - replace with ccnb if (fdholder == NULL) ccn_charbuf_putf(msg, "destroyface(%u);\n", filedesc); else { ccn_charbuf_putf(msg, "newface(%u, 0x%x", filedesc, fdholder->flags); if (fdholder->name->length != 0 && (fdholder->flags & (CCNR_FACE_INET | CCNR_FACE_INET6)) != 0) { ccn_charbuf_putf(msg, ", "); port = ccn_charbuf_append_sockaddr(msg, (struct sockaddr *)fdholder->name->buf); if (port < 0) msg->length--; else if (port > 0) ccn_charbuf_putf(msg, ":%d", port); } ccn_charbuf_putf(msg, ");\n", filedesc); } res = ccn_seqw_write(ccnr->notice, msg->buf, msg->length); ccn_charbuf_destroy(&msg); return(res); }
static void collect_faces_html(struct ccnd_handle *h, struct ccn_charbuf *b) { int i; struct ccn_charbuf *nodebuf; int port; nodebuf = ccn_charbuf_create(); ccn_charbuf_putf(b, "<h4>Faces</h4>" NL); ccn_charbuf_putf(b, "<ul>"); for (i = 0; i < h->face_limit; i++) { struct face *face = h->faces_by_faceid[i]; if (face != NULL && (face->flags & CCN_FACE_UNDECIDED) == 0) { ccn_charbuf_putf(b, " <li>"); ccn_charbuf_putf(b, "<b>face:</b> %u <b>flags:</b> 0x%x", face->faceid, face->flags); ccn_charbuf_putf(b, " <b>pending:</b> %d", face->pending_interests); if (face->recvcount != 0) ccn_charbuf_putf(b, " <b>activity:</b> %d", face->recvcount); nodebuf->length = 0; port = ccn_charbuf_append_sockaddr(nodebuf, face->addr); if (port > 0) { const char *node = ccn_charbuf_as_string(nodebuf); int chk = CCN_FACE_MCAST | CCN_FACE_UNDECIDED | CCN_FACE_NOSEND | CCN_FACE_GG | CCN_FACE_PASSIVE; if ((face->flags & chk) == 0) ccn_charbuf_putf(b, " <b>remote:</b> " "<a href='http://%s:%s/'>" "%s:%d</a>", node, CCN_DEFAULT_UNICAST_PORT, node, port); else if ((face->flags & CCN_FACE_PASSIVE) == 0) ccn_charbuf_putf(b, " <b>remote:</b> %s:%d", node, port); else ccn_charbuf_putf(b, " <b>local:</b> %s:%d", node, port); if (face->sendface != face->faceid && face->sendface != CCN_NOFACEID) ccn_charbuf_putf(b, " <b>via:</b> %u", face->sendface); } ccn_charbuf_putf(b, "</li>" NL); } } ccn_charbuf_putf(b, "</ul>"); ccn_charbuf_destroy(&nodebuf); }
static void collect_faces_xml(struct ccnd_handle *h, struct ccn_charbuf *b) { int i; int m; int port; struct ccn_charbuf *nodebuf; nodebuf = ccn_charbuf_create(); ccn_charbuf_putf(b, "<faces>"); for (i = 0; i < h->face_limit; i++) { struct face *face = h->faces_by_faceid[i]; if (face != NULL && (face->flags & CCN_FACE_UNDECIDED) == 0) { ccn_charbuf_putf(b, "<face>"); ccn_charbuf_putf(b, "<faceid>%u</faceid>" "<faceflags>%04x</faceflags>", face->faceid, face->flags); ccn_charbuf_putf(b, "<pending>%d</pending>", face->pending_interests); ccn_charbuf_putf(b, "<recvcount>%d</recvcount>", face->recvcount); nodebuf->length = 0; port = ccn_charbuf_append_sockaddr(nodebuf, face->addr); if (port > 0) { const char *node = ccn_charbuf_as_string(nodebuf); ccn_charbuf_putf(b, "<ip>%s:%d</ip>", node, port); } if (face->sendface != face->faceid && face->sendface != CCN_NOFACEID) ccn_charbuf_putf(b, "<via>%u</via>", face->sendface); if (face != NULL && (face->flags & CCN_FACE_PASSIVE) == 0) { ccn_charbuf_putf(b, "<meters>"); for (m = 0; m < CCND_FACE_METER_N; m++) collect_meter_xml(h, b, face->meter[m]); ccn_charbuf_putf(b, "</meters>"); } ccn_charbuf_putf(b, "</face>" NL); } } ccn_charbuf_putf(b, "</faces>"); ccn_charbuf_destroy(&nodebuf); }