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