Name

libpcp — port-control-protocol client library

Synopsis

#include <pcp.h>
int pcp_init( struct sockaddr *server,
  struct sockaddr *source,
  pcp_t *pcp);
 
int pcp_close( pcp_t *pcp);
 
int pcp_getsocket( pcp_t *pcp,
  int *sock);
 
int pcp_gettries( pcp_t *pcp,
  int *tries);
 
int pcp_gettimeout( pcp_t *pcp,
  struct timeval *timeout,
  int relative);
 
int pcp_setreset( pcp_t *pcp,
  int reset,
  int *old);
 
int pcp_honor_external_port( pcp_option_t ***options);
 
int pcp_remote_peer_filter4( pcp_option_t ***options,
  uint32_taddr,
  uint16_tport);
 
int pcp_remote_peer_filter6( pcp_option_t ***options,
  uint8_t *addr,
  uint16_tport);
 
int pcp_remote_peer4( pcp_option_t ***options,
  uint32_taddr,
  uint16_tport);
 
int pcp_remote_peer6( pcp_option_t ***options,
  uint8_t *addr,
  uint16_tport);
 
int pcp_makerequest( pcp_t *pcp,
  pcp_request_t *request,
  pcp_option_t **options);
 
int pcp_sendrequest( pcp_t *pcp);
 
int pcp_recvresponse( pcp_t *pcp,
  pcp_response_t *response);
 
const char *pcp_strerror( int error);
 
int pcp_getmapping( pcp_t *pcp,
  pcp_request_t *request,
  pcp_response_t *response,
  pcp_option_t **options);
 
int pcp_renewmapping( pcp_t *pcp,
  pcp_response_t *response);
 
int pcp_delmapping( pcp_t *pcp,
  pcp_response_t *response);
 

DESCRIPTION

pcp_init initializes a PCP handler (source may be NULL).

pcp_close closes a PCP handler.

pcp_getsocket gets the socket file descriptor.

pcp_gettries gets the number of tries.

pcp_gettimeout gets the relative or absolute timeout for the next retry.

pcp_setreset sets the reset flag: when set to one, transient protocol errors are translated to restart of the whole procedure after a timeout.

pcp_honor_external_port stacks a HONOR_EXTERNAL_PORT option.

pcp_pcp_remote_peer_filter4 stacks a REMOTE_PEER_FILTER IPv4 option.

pcp_pcp_remote_peer_filter6 stacks a REMOTE_PEER_FILTER IPv6 option.

pcp_pcp_remote_peer4 stacks a REMOTE_PEER IPv4 option.

pcp_pcp_remote_peer6 stacks a REMOTE_PEER IPv6 option.

pcp_makerequest clears/creates a request. The options is the NULL pointer or a NULL terminated table of pointers to options.

pcp_sendrequest sends/resends the current request.

pcp_recvresponse receives the response to the current request.

pcp_strerror translates an error to its human friendly description.

pcp_getmapping gets a mapping.

pcp_renewmapping renews a mapping.

pcp_delmapping deletes a mapping.

RETURN CODES

PCP_OK

OK

PCP_TRY_AGAIN

try again

PCP_ERR_INVAL

invalid arguments

PCP_ERR_NOMEM

malloc() failed

PCP_ERR_SOCKET

socket() syscall failed

PCP_ERR_BIND

bind() syscall failed

PCP_ERR_CONNECT

connect() syscall failed

PCP_ERR_SEND

send() syscall failed

PCP_ERR_RECV

recv() syscall failed

PCP_ERR_SYSCALL

miscellaneous syscall failed

PCP_ERR_NOREQUEST

no current request

PCP_ERR_RECVBAD

received a bad response

PCP_ERR_TOOMANYOPTS

too many options

PCP_ERR_FAILURE

mapping() function internal failure

PCP_ERR_APP0

user application error 0

PCP_ERR_APP1

user application error 1

PCP_ERR_APP2

user application error 2

PCP_ERR_PROTOBASE

base for protocol errors

PCP_ERR_NETFAILURE

network failure

PCP_ERR_NORESOURCES

out of resources

PCP_ERR_AMBIGUOUS

ambiguous

PCP_ERR_UNSUPVERSION

unsupported version

PCP_ERR_UNSUPOPCODE

unsupported opcode

PCP_ERR_UNSUPOPTION

unsupported option

PCP_ERR_BADOPTION

malformed option

PCP_ERR_UNSPECIFIED

unspecified error

PCP_ERR_BADREQUEST

malformed request

PCP_ERR_UNSUPPROTO

unsupported protocol

PCP_ERR_NOTAUTH

not authorized

PCP_ERR_EXQUOTA

user exceeded quota

PCP_ERR_CANTHONOR

cannot honor external port

PCP_ERR_CANTDELALL

unable to delete all

PCP_ERR_CANTFWDPORT0

cannot forward port zero

SEE ALSO

pcpd(8)

AUTHOR

Internet Systems Consortium