コード例 #1
0
ファイル: natpmp.c プロジェクト: ICTSTUDIO/ZeroTierOne
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);
}
コード例 #2
0
ファイル: natpmp.c プロジェクト: odmanV2/freecenter
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);
}
コード例 #3
0
ファイル: natpmp.c プロジェクト: Kelvinkim/TouchHTTPD
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);
}