parent
665478a47f
commit
6ce6a70973
|
@ -2060,6 +2060,12 @@ main(int argc, char * * argv)
|
||||||
{
|
{
|
||||||
upnp_event_var_change_notify(EWanIPC);
|
upnp_event_var_change_notify(EWanIPC);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef ENABLE_PCP
|
||||||
|
if(GETFLAG(ENABLENATPMPMASK))
|
||||||
|
{
|
||||||
|
PCPPublicAddressChanged();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
should_send_public_address_change_notif = 0;
|
should_send_public_address_change_notif = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,8 +101,10 @@ struct pcp_server_info {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* default server settings, highest version supported is the default */
|
/* default server settings, highest version supported is the default */
|
||||||
static struct pcp_server_info this_server_info = {2};
|
static const struct pcp_server_info this_server_info = {2};
|
||||||
|
|
||||||
|
/* origin for "epoch time" sent into responses */
|
||||||
|
time_t epoch_origin = 0;
|
||||||
|
|
||||||
/* structure holding information from PCP msg*/
|
/* structure holding information from PCP msg*/
|
||||||
/* all variables are in host byte order except IP addresses */
|
/* all variables are in host byte order except IP addresses */
|
||||||
|
@ -1448,7 +1450,10 @@ static void createPCPResponse(unsigned char *response, pcp_info_t *pcp_msg_info)
|
||||||
|
|
||||||
response[1] |= 0x80; /* r_opcode */
|
response[1] |= 0x80; /* r_opcode */
|
||||||
response[3] = pcp_msg_info->result_code;
|
response[3] = pcp_msg_info->result_code;
|
||||||
WRITENU32(response + 8, time(NULL) - startup_time); /* epochtime */
|
if(epoch_origin == 0) {
|
||||||
|
epoch_origin = startup_time;
|
||||||
|
}
|
||||||
|
WRITENU32(response + 8, time(NULL) - epoch_origin); /* epochtime */
|
||||||
switch (pcp_msg_info->result_code) {
|
switch (pcp_msg_info->result_code) {
|
||||||
/*long lifetime errors*/
|
/*long lifetime errors*/
|
||||||
case PCP_ERR_UNSUPP_VERSION:
|
case PCP_ERR_UNSUPP_VERSION:
|
||||||
|
@ -1633,4 +1638,12 @@ int OpenAndConfPCPv6Socket(void)
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
#endif /*ENABLE_IPV6*/
|
#endif /*ENABLE_IPV6*/
|
||||||
|
|
||||||
|
void PCPPublicAddressChanged(void)
|
||||||
|
{
|
||||||
|
/* according to RFC 6887 8.5 :
|
||||||
|
* if the external IP address(es) of the NAT (controlled by
|
||||||
|
* the PCP server) changes, the Epoch time MUST be reset. */
|
||||||
|
epoch_origin = time(NULL);
|
||||||
|
}
|
||||||
#endif /*ENABLE_PCP*/
|
#endif /*ENABLE_PCP*/
|
||||||
|
|
|
@ -52,4 +52,10 @@ int ProcessIncomingPCPPacket(int s, unsigned char *msg_buff, int len,
|
||||||
*/
|
*/
|
||||||
int OpenAndConfPCPv6Socket(void);
|
int OpenAndConfPCPv6Socket(void);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To be called when Public IP address changed (IPv4)
|
||||||
|
*/
|
||||||
|
void PCPPublicAddressChanged(void);
|
||||||
|
|
||||||
#endif /* PCPSERVER_H_INCLUDED */
|
#endif /* PCPSERVER_H_INCLUDED */
|
||||||
|
|
Loading…
Reference in New Issue