]> arthur.barton.de Git - netatalk.git/blob - libatalk/dsi/dsi_init.c
309a28c5c366d30c4b45a1c11cb58938984907f6
[netatalk.git] / libatalk / dsi / dsi_init.c
1 /*
2  * $Id: dsi_init.c,v 1.5 2005-05-03 14:55:15 didg Exp $
3  *
4  * Copyright (c) 1997 Adrian Sun (asun@zoology.washington.edu)
5  * All rights reserved. See COPYRIGHT.
6  */
7
8 #ifdef HAVE_CONFIG_H
9 #include "config.h"
10 #endif /* HAVE_CONFIG_H */
11
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <signal.h>
15 #include <atalk/dsi.h>
16 #include "dsi_private.h"
17
18 DSI *dsi_init(const dsi_proto protocol, const char *program, 
19               const char *hostname, const char *address,
20               const int port, const int proxy, const u_int32_t quantum)
21 {
22     DSI         *dsi;
23
24     if ((dsi = (DSI *) calloc(1, sizeof(DSI))) == NULL) {
25       return( NULL );
26     }
27     dsi->attn_quantum = DSI_DEFQUANT; /* default quantum size */
28     dsi->server_quantum = quantum; /* default server quantum */
29     dsi->program = program;
30
31     /* signals to block. we actually disable timers for "known" 
32      * large transfers (i.e., dsi_read/write). */
33     sigemptyset(&dsi->sigblockset);
34     sigaddset(&dsi->sigblockset, SIGTERM);
35     sigaddset(&dsi->sigblockset, SIGHUP);
36     sigaddset(&dsi->sigblockset, SIGALRM);
37     sigaddset(&dsi->sigblockset, SIGUSR1);
38     /* always block SIGUSR2 even if SERVERTEXT is not defined */
39     sigaddset(&dsi->sigblockset, SIGUSR2);
40     switch (protocol) {
41       /* currently the only transport protocol that exists for dsi */
42     case DSI_TCPIP: 
43       if (!dsi_tcp_init(dsi, hostname, address, port, proxy)) {
44         free(dsi);
45         dsi = NULL;
46       }
47       break;
48
49     default: /* unknown protocol */
50       free(dsi);
51       dsi = NULL;
52       break;
53     }
54
55     return dsi;
56 }
57
58 void dsi_setstatus(DSI *dsi, char *status, const size_t slen)
59 {
60     dsi->status = status;
61     dsi->statuslen = slen;
62 }