Back to index

courier  0.68.2
Functions
rfc1035mkaddress.c File Reference
#include "config.h"
#include "rfc1035.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>

Go to the source code of this file.

Functions

int rfc1035_mkaddress (int af, RFC1035_NETADDR *buf, const RFC1035_ADDR *addr, int port, const struct sockaddr **ptr, int *len)

Function Documentation

int rfc1035_mkaddress ( int  af,
RFC1035_NETADDR *  buf,
const RFC1035_ADDR *  addr,
int  port,
const struct sockaddr **  ptr,
int *  len 
)

Definition at line 19 of file rfc1035mkaddress.c.

{
struct sockaddr_in sin;

#if    RFC1035_IPV6

       if (af == AF_INET6)
       {
       struct sockaddr_in6 sin6;

              memset(&sin6, 0, sizeof(sin6));
              sin6.sin6_family=af;
              sin6.sin6_addr= *addr;
              sin6.sin6_port=port;
              memcpy(buf, &sin6, sizeof(sin6));
              *ptr=(struct sockaddr *)buf;
              *len=sizeof(sin6);
              return (0);
       }

       if (af != AF_INET || (!IN6_IS_ADDR_V4MAPPED(addr) && memcmp(addr, &in6addr_any, sizeof(*addr))))
       {
              errno=EAFNOSUPPORT;
              return (-1);
       }

       memset(&sin, 0, sizeof(sin));
       sin.sin_family=af;
       rfc1035_ipv6to4(&sin.sin_addr, addr);
       sin.sin_port=port;
#else
       if (af != AF_INET)
       {
              errno=EINVAL;
              return (-1);
       }
       memset(&sin, 0, sizeof(sin));
       sin.sin_family=af;
       sin.sin_addr= *addr;
       sin.sin_port=port;
#endif
       memcpy(buf, &sin, sizeof(sin));
       *ptr=(struct sockaddr *)buf;
       *len=sizeof(sin);
       return (0);
}

Here is the caller graph for this function: