OpenSS7 SS7 for the Common Man |
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |
||||||||||||||||||||||||||
Home | Overview | Status | News | Documentation | Resources | About | |||||||||||||||||||||
File /code/strss7/lib/libxnet/t_connect.c#ident "@(#) $RCSfile: t_connect.c,v $ $Name: $($Revision: 0.8.2.3 $) $Date: 2003/05/28 08:01:28 $" static char const ident[] = "$RCSfile: t_connect.c,v $ $Name: $($Revision: 0.8.2.3 $) $Date: 2003/05/28 08:01:28 $"; #include <sys/stropts.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/xti.h> #include <sys/tpi.h> #include <timod.h> #include "xti.h" static int _t_connect(int fd, const struct t_call *snd, struct t_call *rcv, struct t_info *info) { union { struct { struct T_conn_req prim; char addr[info->addr]; char opts[info->options]; char data[info->connect]; } req; struct { struct T_ok_ack prim; } ret; } buf; buf.req.prim.PRIM_type = T_CONN_REQ; if (snd) { if ((snd->addr.len && !snd->addr.buf) || (snd->opt.len && !snd->opt.buf) || (snd->udata.len && !snd->udata.buf)) goto efault; buf.req.prim.DEST_length = snd->addr.len; buf.req.prim.DEST_offset = snd->addr.len ? sizeof(buf.req.prim) : 0; if (snd->addr.len) memcpy(buf.req.addr, snd->addr.buf, snd->addr.len); buf.req.prim.DEST_length = snd->opt.len; buf.req.prim.DEST_offset = snd->opt.len ? sizeof(buf.req.prim) + snd->addr.len : 0; if (snd->opt.len) memcpy(buf.req.addr + snd->addr.len, snd->opt.buf, snd->opt.len); } else { buf.req.prim.DEST_length = 0; buf.req.prim.DEST_offset = 0; buf.req.prim.OPT_length = 0; buf.req.prim.OPT_offset = 0; } if (t_strioctl(fd, TI_SETPEERNAME, &buf, sizeof(buf)) < 0) goto error; return _t_rcvconnect(fd, rcv, info); efault: t_errno = TSYSERR; errno = EFAULT; goto error; error: return (-1); } int t_connect(int fd, const struct t_call *snd, struct t_call *rcv) { struct t_info info = { 0, }; int state; if ((state = _t_getsizes(fd, &info)) < 0) goto error; switch (state) { case TS_UNBND: case TS_WACK_BREQ: case TS_WACK_UREQ: case TS_IDLE: case TS_WACK_OPTREQ: case TS_WACK_CREQ: case TS_WCON_CREQ: case TS_WRES_CIND: case TS_WACK_CRES: case TS_DATA_XFER: case TS_WIND_ORDREL: case TS_WREQ_ORDREL: case TS_WACK_DREQ6: case TS_WACK_DREQ7: case TS_WACK_DREQ9: case TS_WACK_DREQ10: case TS_WACK_DREQ11: default: } return _t_connect(fd, snd, rcv, &info); error: return (-1); }
|
|||||||||||||||||||||||||||
OpenSS7 SS7 for the Common Man |
Home | Overview | Status | News | Documentation | Resources | About | ||||||||||||||||||||
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |