int show_interface_detail_msg(struct imsg *imsg) { struct ctl_iface *iface; switch (imsg->hdr.type) { case IMSG_CTL_SHOW_INTERFACE: iface = imsg->data; printf("\n"); printf("Interface %s, line protocol is %s\n", iface->name, print_link(iface->flags)); printf(" Internet address %s Area %s\n", log_in6addr(&iface->addr), inet_ntoa(iface->area)); printf(" Link type %s, state %s", get_media_descr(get_ifms_type(iface->if_type)), get_linkstate(iface->if_type, iface->linkstate)); if (iface->linkstate != LINK_STATE_DOWN && iface->baudrate > 0) { printf(", "); print_baudrate(iface->baudrate); } printf("\n"); printf(" Router ID %s, network type %s, cost: %d\n", inet_ntoa(iface->rtr_id), if_type_name(iface->type), iface->metric); printf(" Transmit delay is %d sec(s), state %s, priority %d\n", iface->transmit_delay, if_state_name(iface->state), iface->priority); printf(" Designated Router (ID) %s\n", inet_ntoa(iface->dr_id)); printf(" Interface address %s\n", log_in6addr(&iface->dr_addr)); printf(" Backup Designated Router (ID) %s\n", inet_ntoa(iface->bdr_id)); printf(" Interface address %s\n", log_in6addr(&iface->bdr_addr)); printf(" Timer intervals configured, " "hello %d, dead %d, wait %d, retransmit %d\n", iface->hello_interval, iface->dead_interval, iface->dead_interval, iface->rxmt_interval); if (iface->passive) printf(" Passive interface (No Hellos)\n"); else if (iface->hello_timer < 0) printf(" Hello timer not running\n"); else printf(" Hello timer due in %s\n", fmt_timeframe_core(iface->hello_timer)); printf(" Uptime %s\n", fmt_timeframe_core(iface->uptime)); printf(" Neighbor count is %d, adjacent neighbor count is " "%d\n", iface->nbr_cnt, iface->adj_cnt); break; case IMSG_CTL_END: printf("\n"); return (1); default: break; } return (0); }
int show_fib_interface_msg(struct imsg *imsg) { struct kif *k; int ifms_type; switch (imsg->hdr.type) { case IMSG_CTL_IFINFO: k = imsg->data; printf("%-15s", k->ifname); printf("%-15s", k->flags & IFF_UP ? "UP" : ""); ifms_type = get_ifms_type(k->media_type); if (ifms_type) printf("%s, ", get_media_descr(ifms_type)); printf("%s", get_linkstate(k->media_type, k->link_state)); if (k->link_state != LINK_STATE_DOWN && k->baudrate > 0) { printf(", "); print_baudrate(k->baudrate); } printf("\n"); break; case IMSG_CTL_END: printf("\n"); return (1); default: break; } return (0); }
static void dump_boot(DOS_FS *fs,struct boot_sector *b,unsigned lss) { unsigned short sectors; printf("Boot sector contents:\n"); if (!atari_format) { char id[9]; strncpy(id,b->system_id,8); id[8] = 0; printf("System ID \"%s\"\n",id); } else { /* On Atari, a 24 bit serial number is stored at offset 8 of the boot * sector */ printf("Serial number 0x%x\n", b->system_id[5] | (b->system_id[6]<<8) | (b->system_id[7]<<16)); } printf("Media byte 0x%02x (%s)\n",b->media,get_media_descr(b->media)); printf("%10d bytes per logical sector\n",GET_UNALIGNED_W(b->sector_size)); printf("%10d bytes per cluster\n",fs->cluster_size); printf("%10d reserved sector%s\n",CF_LE_W(b->reserved), CF_LE_W(b->reserved) == 1 ? "" : "s"); printf("First FAT starts at byte %llu (sector %llu)\n", (unsigned long long)fs->fat_start, (unsigned long long)fs->fat_start/lss); printf("%10d FATs, %d bit entries\n",b->fats,fs->fat_bits); printf("%10d bytes per FAT (= %u sectors)\n",fs->fat_size, fs->fat_size/lss); if (!fs->root_cluster) { printf("Root directory starts at byte %llu (sector %llu)\n", (unsigned long long)fs->root_start, (unsigned long long)fs->root_start/lss); printf("%10d root directory entries\n",fs->root_entries); } else { printf( "Root directory start at cluster %lu (arbitrary size)\n", fs->root_cluster); } printf("Data area starts at byte %llu (sector %llu)\n", (unsigned long long)fs->data_start, (unsigned long long)fs->data_start/lss); printf("%10lu data clusters (%llu bytes)\n",fs->clusters, (unsigned long long)fs->clusters*fs->cluster_size); printf("%u sectors/track, %u heads\n",CF_LE_W(b->secs_track), CF_LE_W(b->heads)); printf("%10u hidden sectors\n", atari_format ? /* On Atari, the hidden field is only 16 bit wide and unused */ (((unsigned char *)&b->hidden)[0] | ((unsigned char *)&b->hidden)[1] << 8) : CF_LE_L(b->hidden)); sectors = GET_UNALIGNED_W( b->sectors ); printf("%10u sectors total\n", sectors ? sectors : CF_LE_L(b->total_sect)); }
/* **************************************************************** * DESCRIBE METHOD HANDLING **************************************************************** */ int RTSP_describe(RTSP_buffer * rtsp) { int valid_url, res; char object[255], server[255], trash[255]; char *p; unsigned short port; char url[255]; media_entry media, req; description_format descr_format = df_SDP_format; // shawill put to some default char descr[MAX_DESCR_LENGTH]; /* Extract la URL */ if (!sscanf(rtsp->in_buffer, " %*s %254s ", url)) { send_reply(400, 0, rtsp); /* bad request */ return ERR_NOERROR; } /* Validate the URL */ switch (parse_url(url, server, sizeof(server), &port, object, sizeof(object))) { case 1: // bad request send_reply(400, 0, rtsp); return ERR_NOERROR; break; case -1: // internal server error send_reply(500, 0, rtsp); return ERR_NOERROR; break; default: break; } if (strcmp(server, prefs_get_hostname()) != 0) { /* Currently this feature is disabled. */ /* wrong server name */ // send_reply(404, 0 , rtsp); /* Not Found */ // return ERR_NOERROR; } if (strstr(object, "../")) { /* disallow relative paths outside of current directory. */ send_reply(403, 0, rtsp); /* Forbidden */ return ERR_NOERROR; } if (strstr(object, "./")) { /* Disallow ./ */ send_reply(403, 0, rtsp); /* Forbidden */ return ERR_NOERROR; } p = strrchr(object, '.'); valid_url = 0; if (p == NULL) { send_reply(415, 0, rtsp); /* Unsupported media type */ return ERR_NOERROR; } else { valid_url = is_supported_url(p); } if (!valid_url) { send_reply(415, 0, rtsp); /* Unsupported media type */ return ERR_NOERROR; } // Disallow Header REQUIRE if (strstr(rtsp->in_buffer, HDR_REQUIRE)) { send_reply(551, 0, rtsp); /* Option not supported */ return ERR_NOERROR; } /* Get the description format. SDP is recomended */ if (strstr(rtsp->in_buffer, HDR_ACCEPT) != NULL) { if (strstr(rtsp->in_buffer, "application/sdp") != NULL) { descr_format = df_SDP_format; } else { // Add here new description formats send_reply(551, 0, rtsp); /* Option not supported */ return ERR_NOERROR; } } // Get the CSeq if ((p = strstr(rtsp->in_buffer, HDR_CSEQ)) == NULL) { send_reply(400, 0, rtsp); /* Bad Request */ return ERR_NOERROR; } else { if (sscanf(p, "%254s %d", trash, &(rtsp->rtsp_cseq)) != 2) { send_reply(400, 0, rtsp); /* Bad Request */ return ERR_NOERROR; } } memset(&media, 0, sizeof(media)); memset(&req, 0, sizeof(req)); req.flags = ME_DESCR_FORMAT; req.descr_format = descr_format; res = get_media_descr(object, &req, &media, descr); if (res == ERR_NOT_FOUND) { send_reply(404, 0, rtsp); // Not found return ERR_NOERROR; } if (res == ERR_PARSE || res == ERR_GENERIC || res == ERR_ALLOC) { send_reply(500, 0, rtsp); // Internal server error return ERR_NOERROR; } if(max_connection()==ERR_GENERIC){ /*redirect*/ return send_redirect_3xx(rtsp, object); } fnc_log(FNC_LOG_INFO,"DESCRIBE %s RTSP/1.0 ",url); send_describe_reply(rtsp, object, descr_format, descr); // See User-Agent if ((p=strstr(rtsp->in_buffer, HDR_USER_AGENT))!=NULL) { char cut[strlen(p)]; strcpy(cut,p); p=strstr(cut, "\n"); cut[strlen(cut)-strlen(p)-1]='\0'; fnc_log(FNC_LOG_CLIENT,"%s\n",cut); } else fnc_log(FNC_LOG_CLIENT,"- \n"); return ERR_NOERROR; }