summaryrefslogtreecommitdiff
path: root/ace/ATM_Stream.cpp
diff options
context:
space:
mode:
authorjoeh <joeh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-08-27 14:51:35 +0000
committerjoeh <joeh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-08-27 14:51:35 +0000
commita1323187c3a1bb4ac8715a608b7660f5917ce6f6 (patch)
tree55d5dbb179e0ab18c87522e9dd5af751e50f2ebf /ace/ATM_Stream.cpp
parent298d64aa8e522db8e4958ec2f0e81a11a61c95ad (diff)
downloadATCD-a1323187c3a1bb4ac8715a608b7660f5917ce6f6.tar.gz
Adding get_vpi_vci method
Diffstat (limited to 'ace/ATM_Stream.cpp')
-rw-r--r--ace/ATM_Stream.cpp89
1 files changed, 87 insertions, 2 deletions
diff --git a/ace/ATM_Stream.cpp b/ace/ATM_Stream.cpp
index 436a5bdc85b..f00e1aafc6a 100644
--- a/ace/ATM_Stream.cpp
+++ b/ace/ATM_Stream.cpp
@@ -25,7 +25,7 @@ ACE_ATM_Stream::dump (void) const
char*
ACE_ATM_Stream::get_peer_name (void) const
{
- ACE_TRACE ("ACE_ATM_Stream::dump");
+ ACE_TRACE ("ACE_ATM_Stream::get_peer_name");
#if defined (ACE_HAS_FORE_ATM_XTI)
// // Use t_getprotaddr for XTI/ATM
// struct t_bind *localaddr = (struct t_bind *) ACE_OS::t_alloc (get_handle (),
@@ -47,7 +47,8 @@ ACE_ATM_Stream::get_peer_name (void) const
// T_BIND);
// return (connected_name);
-
+#error "This doesn't seem to work. May need to jimmy-rig something with the"
+#error "/etc/xti_hosts file - Ugh!"
ACE_ATM_Addr sa;
struct netbuf name;
name.maxlen = sa.get_size ();
@@ -74,4 +75,88 @@ ACE_ATM_Stream::get_peer_name (void) const
#endif /* ACE_HAS_FORE_ATM_XTI */
}
+int
+ACE_ATM_Stream::get_vpi_vci (ACE_UINT16 &vpi,
+ ACE_UINT16 &vci) const
+{
+ ACE_TRACE ("ACE_ATM_Stream::get_vpi_vci");
+#if defined (ACE_HAS_FORE_ATM_XTI)
+ struct t_atm_conn_prop conn_prop;
+ char* connect_opts = (char *)&conn_prop;
+ int opt_size = sizeof(t_atm_conn_prop);
+ struct t_info info;
+ struct t_optmgmt opt_req, opt_ret;
+
+ if (ACE_OS::t_getinfo(stream_.get_handle(),
+ &info) < 0)
+ {
+ ACE_OS::t_error("t_getinfo");
+ return -1;
+ }
+
+ char *buf_req = (char *) ACE_OS::malloc(info.options);
+ if (buf_req == (char *) NULL)
+ {
+ ACE_OS::fprintf(stderr,
+ "Unable to allocate %ld bytes for options\n",
+ info.options);
+ return -1;
+ }
+
+ char *buf_ret = (char *) ACE_OS::malloc(info.options);
+ if (buf_ret == (char *) NULL)
+ {
+ ACE_OS::fprintf(stderr,
+ "Unable to allocate %ld bytes for options\n",
+ info.options);
+ return -1;
+ }
+
+ ACE_OS::memset(&opt_req, 0, sizeof(opt_req));
+ ACE_OS::memset(&opt_ret, 0, sizeof(opt_ret));
+
+ struct t_opthdr *popt = (struct t_opthdr *) buf_req;
+ struct t_opthdr *popt_ret = (struct t_opthdr *) buf_ret;
+
+ popt->len= sizeof(struct t_opthdr) + opt_size;
+
+ // We are only concerned with SVCs so no other check or values are needed
+ // here.
+ popt->level = T_ATM_SIGNALING;
+ popt->name = T_ATM_CONN_PROP;
+ popt->status = 0;
+
+ opt_req.opt.len = popt->len;
+ opt_req.opt.buf = (char *)popt;
+ opt_req.flags = T_CURRENT;
+
+ popt = T_OPT_NEXTHDR(buf_req,
+ info.options,
+ popt);
+ opt_ret.opt.maxlen = info.options;
+ opt_ret.opt.buf = (char *)popt_ret;
+
+ if (ACE_OS::t_optmgmt(stream_.get_handle(),
+ &opt_req,
+ &opt_ret) < 0) {
+ ACE_OS::t_error("t_optmgmt");
+ return -1;
+ }
+
+ ACE_OS::memcpy(connect_opts,
+ (char *)popt_ret + sizeof(struct t_opthdr),
+ opt_size);
+
+ ACE_OS::free(buf_ret);
+ ACE_OS::free(buf_req);
+
+ vpi = conn_prop.vpi;
+ vci = conn_prop.vci;
+ return (0);
+#elif defined (ACE_HAS_FORE_ATM_WS2)
+#else
+ return (-1);
+#endif /* ACE_HAS_FORE_ATM_XTI */
+}
+
#endif /* ACE_HAS_ATM */