netatalk 4.5.0
Free and Open Source Apple Filing Protocol (AFP) Server
Loading...
Searching...
No Matches
dsi_tcp.c File Reference
`#include <arpa/inet.h>`
`#include <errno.h>`
`#include <net/if.h>`
`#include <netdb.h>`
`#include <netinet/in.h>`
`#include <netinet/tcp.h>`
`#include <signal.h>`
`#include <stdint.h>`
`#include <stdio.h>`
`#include <stdlib.h>`
`#include <string.h>`
`#include <sys/ioctl.h>`
`#include <sys/socket.h>`
`#include <sys/time.h>`
`#include <sys/types.h>`
`#include <unistd.h>`
`#include <atalk/logger.h>`
`#include <tcpd.h>`
`#include <atalk/dsi.h>`
`#include <atalk/compat.h>`
`#include <atalk/util.h>`
`#include <atalk/errchk.h>`

## Macros
#define | min(a, b)
#define | DSI_TCPMAXPEND 20
#define | DSI_TCPTIMEOUT 120
#define | SOCKLEN_T unsigned int
#define | IFF_SLAVE 0
#define | SOL_TCP IPPROTO_TCP
#define | AI_NUMERICSERV 0

## Functions
static void | dsi_tcp_close (DSI *dsi)
static void | timeout_handler (int sig)
static void | dsi_init_buffer (DSI *dsi)
void | dsi_free (DSI *dsi)
static pid_t | dsi_tcp_open (DSI *dsi)
static void | guess_interface (DSI *dsi, const char *hostname, const char *port)
static int | dsi_tcp_listen (const char *address, const char *port, struct addrinfo *hints, DSI *dsi, bool *psocket_err_afnotsup)
int | dsi_tcp_init (DSI *dsi, const char *hostname, const char *inaddress, const char *inport)
| Initialize DSI over TCP.

## Variables
int | allow_severity = log_info
int | deny_severity = log_warning
static struct itimerval | itimer

## Macro Definition Documentation

## ◆ AI_NUMERICSERV

#define AI_NUMERICSERV 0

## ◆ DSI_TCPMAXPEND

#define DSI_TCPMAXPEND 20

max # of pending connections

## ◆ DSI_TCPTIMEOUT

#define DSI_TCPTIMEOUT 120

timeout in seconds for connections

## ◆ IFF_SLAVE

#define IFF_SLAVE 0

## ◆ min

#define min | ( |  | a,
|  |  | b )

Value:
((a) < (b) ? (a) : (b))

## ◆ SOCKLEN_T

#define SOCKLEN_T unsigned int

## ◆ SOL_TCP

#define SOL_TCP IPPROTO_TCP

## Function Documentation

## ◆ dsi_free()

void dsi_free | ( | DSI * | dsi | ) |

Free any allocated resources of the master afpd DSI objects and close server socket

## ◆ dsi_init_buffer()

void dsi_init_buffer | ( | DSI * | dsi | ) |
| static

Allocate DSI read buffer and read-ahead buffer

## ◆ dsi_tcp_close()

void dsi_tcp_close | ( | DSI * | dsi | ) |
| static

## ◆ dsi_tcp_init()

int dsi_tcp_init | ( | DSI * | dsi,
|  | const char * | hostname,
|  | const char * | inaddress,
|  | const char * | inport )

Initialize DSI over TCP.

Parameters

  [in,out] | dsi | DSI handle
  [in] | hostname | pointer to hostname string
  [in] | inaddress | Optional IPv4 or IPv6 address with an optional port, may be NULL
  [in] | inport | pointer to port string

Creates listening AFP/DSI socket. If the parameter inaddress is NULL, then we listen on the wildcard address, i,e, on all interfaces. That should mean listening on the IPv6 address "::" on IPv4/IPv6 dual stack kernels, accepting both v4 and v6 requests.

If the parameter inaddress is not NULL, then we only listen on the given address. The parameter may contain a port number using the URL format for address and port:

IPv4, IPv4:port, IPv6, [IPv6], [IPv6]:port

Parameter inport must be a valid pointer to a port string and is used if the inaddress parameter doesn't contain a port.

Returns
  0 on success, -1 on failure

## ◆ dsi_tcp_listen()

int dsi_tcp_listen | ( | const char * | address,
|  | const char * | port,
|  | struct addrinfo * | hints,
|  | DSI * | dsi,
|  | bool * | psocket_err_afnotsup )
| static

## ◆ dsi_tcp_open()

pid_t dsi_tcp_open | ( | DSI * | dsi | ) |
| static

accept the socket and do a little sanity checking

## ◆ guess_interface()

void guess_interface | ( | DSI * | dsi,
|  | const char * | hostname,
|  | const char * | port )
| static

## ◆ timeout_handler()

void timeout_handler | ( | int | sig | ) |
| static

alarm handler for tcp_open

## Variable Documentation

## ◆ allow_severity

int allow_severity = log_info

## ◆ deny_severity

int deny_severity = log_warning

## ◆ itimer

struct itimerval itimer
| static