LIBSPEC int sendnewportmappingrequest(natpmp_t * p, int protocol, uint16_t privateport, uint16_t publicport, uint32_t lifetime) { if(!p || (protocol!=NATPMP_PROTOCOL_TCP && protocol!=NATPMP_PROTOCOL_UDP)) return NATPMP_ERR_INVALIDARGS; p->pending_request[0] = 0; p->pending_request[1] = protocol; p->pending_request[2] = 0; p->pending_request[3] = 0; /* break strict-aliasing rules : *((uint16_t *)(p->pending_request + 4)) = htons(privateport); */ p->pending_request[4] = (privateport >> 8) & 0xff; p->pending_request[5] = privateport & 0xff; /* break stric-aliasing rules : *((uint16_t *)(p->pending_request + 6)) = htons(publicport); */ p->pending_request[6] = (publicport >> 8) & 0xff; p->pending_request[7] = publicport & 0xff; /* break stric-aliasing rules : *((uint32_t *)(p->pending_request + 8)) = htonl(lifetime); */ p->pending_request[8] = (lifetime >> 24) & 0xff; p->pending_request[9] = (lifetime >> 16) & 0xff; p->pending_request[10] = (lifetime >> 8) & 0xff; p->pending_request[11] = lifetime & 0xff; p->pending_request_len = 12; return sendnatpmprequest(p); }
int sendnewportmappingrequest(natpmp_t * p, int protocol, uint16_t privateport, uint16_t publicport, uint32_t lifetime) { uint16_t *n; uint32_t *m; if(!p || (protocol!=NATPMP_PROTOCOL_TCP && protocol!=NATPMP_PROTOCOL_UDP)) return NATPMP_ERR_INVALIDARGS; p->pending_request[0] = 0; p->pending_request[1] = (char)protocol; p->pending_request[2] = 0; p->pending_request[3] = 0; n = (uint16_t *)(p->pending_request + 4); *n = htons(privateport); n = (uint16_t *)(p->pending_request + 6); *n = htons(publicport); m = (uint32_t *)(p->pending_request + 8); *m = htonl(lifetime); //*((uint16_t *)(p->pending_request + 4)) = htons(privateport); //*((uint16_t *)(p->pending_request + 6)) = htons(publicport); //*((uint32_t *)(p->pending_request + 8)) = htonl(lifetime); p->pending_request_len = 12; return sendnatpmprequest(p); }
int sendpublicaddressrequest(natpmp_t * p) { if(!p) return NATPMP_ERR_INVALIDARGS; //static const unsigned char request[] = { 0, 0 }; p->pending_request[0] = 0; p->pending_request[1] = 0; p->pending_request_len = 2; // TODO: return 0 instead of sizeof(request) ?? return sendnatpmprequest(p); }