void report_billing() { const float seconds_per_day = (float)(86400.0); int hours; /* 0..23 */ int minutes; /* 0..59 */ int seconds; /* 0..59 */ float elapsed_time; float billing_seconds; float billing_days; billing_seconds = timer_seconds(&end_time) - timer_seconds(&start_time); billing_days = timer_days(&end_date) - timer_days(&start_date); if (billing_seconds >= 0.0) { billing_time = (seconds_per_day * billing_days) + billing_seconds; } else { billing_time = (seconds_per_day * (billing_days - (float)(1.0))) + billing_seconds; } elapsed_time = billing_time; hours = (int)(elapsed_time / (float)(3600.0)); elapsed_time = elapsed_time - (((float)(hours)) * (float)(3600.0)); minutes = (int)(elapsed_time / 60.0); elapsed_time = elapsed_time - (((float)(minutes)) * (float)(60.0)); seconds = (int)(elapsed_time); printf("Elapsed Time = %2.2d:%2.2d:%2.2d\n", hours, minutes, seconds); } /* report_billing */
/* * Send trap, SNMP v1 (RFC 1157). * SEQUENCE { * version: INTEGER [=0] * community: STRING * pdu: SEQUENCE [=TRAP] { * enterprise: OBJECT IDENTIFIER * agent-addr: NetworkAddress * generic-trap: INTEGER * specific-trap: INTEGER * time-stamp: INTEGER * varlist: SEQUENCE { * var1: SEQUENCE { * name: OID * value: ... * } * ... * } } } */ bool_t snmp_trap_v1 (snmp_t *snmp, udp_socket_t *sock, unsigned char *local_ip, unsigned trap_type, asn_t *oid, asn_t *value) { asn_t *pdu, *trap, *varlist, *var1; buf_t *pkt; unsigned char *output, status; unsigned long santisec; /*debug_printf ("snmp_trap(%#x)\n", traptype);*/ if (oid) { var1 = asn_make_seq (snmp->pool, 2, ASN_SEQUENCE); if (! var1) { asn_free (oid); asn_free (value); return 0; } var1->seq.count = 2; var1->seq.arr[0] = oid; var1->seq.arr[1] = value; } else var1 = 0; /* * List of variables. */ varlist = asn_make_seq (snmp->pool, 1, ASN_SEQUENCE); if (! varlist) { asn_free (var1); return 0; } varlist->seq.count = var1 ? 1 : 0; varlist->seq.arr[0] = var1; /* * Protocol data unit. */ pdu = asn_make_seq (snmp->pool, 6, ASN_TRAP); if (! pdu) { asn_free (varlist); return 0; } pdu->seq.count = 6; pdu->seq.arr[5] = varlist; /* Enterprise */ pdu->seq.arr[0] = asn_make_oid (snmp->pool, "1.3.6.1.4.1.20520"); pdu->seq.arr[0]->oid.id[6] = snmp->enterprise; /* Agent IP address */ pdu->seq.arr[1] = asn_make_int (snmp->pool, NTOHL (*(unsigned long*) local_ip), ASN_IP_ADDRESS); /* Generic trap code */ pdu->seq.arr[2] = asn_make_int (snmp->pool, trap_type & 0xff, ASN_INTEGER); /* Specific trap code */ pdu->seq.arr[3] = asn_make_int (snmp->pool, trap_type >> 8, ASN_INTEGER); /* Timestamp */ santisec = 0; if (snmp->ip && snmp->ip->timer) { unsigned long msec; unsigned days = timer_days (snmp->ip->timer, &msec); santisec = msec / 10 + days * 24L * 60 * 60 * 100; } pdu->seq.arr[4] = asn_make_int (snmp->pool, santisec, ASN_TIME_TICKS); /* * Trap. */ trap = asn_make_seq (snmp->pool, 3, ASN_SEQUENCE); if (! trap) { asn_free (pdu); return 0; } trap->seq.count = 3; trap->seq.arr[2] = pdu; /* Version */ trap->seq.arr[0] = asn_make_int (snmp->pool, 0, ASN_INTEGER); /* Community */ trap->seq.arr[1] = asn_make_string (snmp->pool, snmp->trap_community); /* Encode and send */ status = 0; pkt = buf_alloc (snmp->pool, TRAP_PACKET_SIZE, 50); if (pkt) { output = asn_encode (trap, pkt->payload + pkt->len, pkt->len); if (! output) { buf_free (pkt); } else { /* Send */ assert (output >= pkt->payload); buf_add_header (pkt, - (output - pkt->payload)); /* debug_dump ("trap-v1", pkt->payload, pkt->len); */ status = udp_sendto (sock, pkt, snmp->trap_addr, 162); ++snmp->out_traps; ++snmp->out_pkts; } } asn_free (trap); return status; }