<%!
struct icm_pconn_info_type
{
  int conn;
  int guid;
  int nihdl;
  int socket;
  string role;
  string obj_id;
  int obj_fd;
  int flags;
  int wp_timeout;
  int proc_timeout;
  int keep_alive_timeout;
  int port_local;
  int port_peer;
  string addr_local;
  string addr_peer;

  int tid;
  int uid;
  int mode;
  string ctx_id;
  int ctx_state;
  int partner;
  int client_no;
  int open_requests;
  string gwy_convid;
  string ext_convid;
  int snc_ctx_len;
  boolean ready4failover;
  boolean allowed4failover;
  string disconnect_time;
};

/* */
static string get_partner (int partner)
{
  switch (partner) {
    case 0: return ("none"); break;
    case 1: return ("DP"); break;
    case 2: return ("WP"); break;
    case 3: return ("ICMON"); break;
    case 4: return ("ICMBND"); break;
    case 5: return ("WEBDISPCLNT"); break;
    case 6: return ("JCTRL"); break;
    case 7: return ("JSERV"); break;
    case 8: return ("JCO"); break;
    case 9: return ("STARTSRV"); break;
    default: return ("unknown");
  };
}
static string get_flag (int flag)
{
  switch (flag) {
    case 0: return ("NONE"); break;
    case 1: return ("BLOCK"); break;
    case 2: return ("CONNECTED"); break;
    case 4: return ("INCONN"); break;
    case 8: return ("TRC"); break;
    case 16: return ("CLOSED"); break;
    default: return ("unknown");
  }
}
%>

<%
int    nr, dir, max;
int    rc;
string browser, appl;
string sstr;

struct icm_pconn_info_type icm_conn_tab[];

browser = __icm_get_browser_type();
appl    = __icm_get_system_property ("app_name");
dir  = __icm_get_form_field ("dir");
sstr = __icm_get_form_field ("sstr");

__icm_get_proxy_conn_info (icm_conn_tab);
if (sstr != "")
  sort (icm_conn_tab, dir, sstr);

if (dir == 1)
  dir = -1;
else
  dir = 1;

%>
  <html>
    <head>
      <link rel=stylesheet type="text/css" href="../public/css/controls_<%=browser%>.css">
      <link rel=stylesheet type="text/css" href="../public/css/sapbsp.css">
      <title><%=appl%> Used Connections</title>
    </head>
    <body class="sapBdy">
      <table border=0 cellspacing=1 cellpadding=0 class="sapTbvAlt">
	<tr>
	  <td class="sapTbvCellAlt" Colspan="11">
	    <b><i>Active JCo Proxy Connections </i></b>
	  </td>
	  <td class="sapTbvCellAlt" align="right">
	    <a href="javascript:parent.frames['main'].location.reload()" class="sapBtnEmph" title="refresh page"><nobr>Refresh</nobr></a>
	  </td>
	</tr>
	<tr>
	  <th align="left" class="sapTbvCellAlt">
	    <i>No.</i>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=conn&dir=<%=dir%>" title="Sort by unique connection identifier">
		<i>Conn ID</i> </a>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=role&dir=<%=dir%>" title="Sort by incoming (server) or outgoing (client) connection"><i>Role</i> </a>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=addr_peer&dir=<%=dir%>" title="Sort by IP address of the client">
		<i>Peer Addr</i></a>
	    :
	    <a href="./show_pconns.icp?sstr=port_peer&dir=<%=dir%>" title="Sort by port number of the client">
		<i>Port</i></a>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=addr_local&dir=<%=dir%>" title="Sort by local IP address of the connection">
		<i>Local Addr</i></a>
	    :
	    <a href="./show_pconns.icp?sstr=port_local&dir=<%=dir%>" title="Sort by local port number of the connection">
		<i>Port</i></a>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=flags&dir=<%=dir%>" title="Sort by flags"><i>Flags</i></a>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=partner&dir=<%=dir%>" title="Sort by partner"><i>partner/client</i></a>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=gwy_convid&dir=<%=dir%>" title="Sort by conversation ID"><i>convID (int/ext)</i></a>
	  </th>

	  <th align="left" class="sapTbvCellAlt">
	    <i>SNC len</i>
	  </th>

	  <th align="left" class="sapTbvCellAlt">
	    <i>Failover (ready/allowed)</i>
	  </th>

	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=disconnect_time&dir=<%=dir%>" title="Sort by disconnect time"><i>Disconnect Time</i> </a>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=nihdl&dir=<%=dir%>" title="Sort by internal Network Interface Identifier for this connection">
	<i>NI/socket</i> </a>
	  </td>
	</tr>
<%
        max = arraylen(icm_conn_tab);
	for (nr = 0; nr < max; nr++) {
	  if (icm_conn_tab[nr].partner == 8) {
%>
	<tr>
	  <td class="sapTbvCellStd"><%= nr %></td>
	  <td class="sapTbvCellStd">
	    (<%= icm_conn_tab[nr].conn %>/<%= icm_conn_tab[nr].guid %>)
	  </td>
	  <td class="sapTbvCellStd"><%= icm_conn_tab[nr].role %></td>
	  <td class="sapTbvCellStd">
	    <%= icm_conn_tab[nr].addr_peer %>:<%= icm_conn_tab[nr].port_peer %>
	  </td>
	  <td class="sapTbvCellStd">
	    <%= icm_conn_tab[nr].addr_local %>:<%= icm_conn_tab[nr].port_local %>
	  </td>
	  <td class="sapTbvCellStd"><%= icm_conn_tab[nr].flags %></td>
	  <td class="sapTbvCellStd"><%= get_partner(icm_conn_tab[nr].partner)%>/<%= icm_conn_tab[nr].client_no %></td>

	  <td class="sapTbvCellStd"><%= icm_conn_tab[nr].gwy_convid %><br>
	  <%= icm_conn_tab[nr].ext_convid %></td>

	  <td class="sapTbvCellStd"><%= icm_conn_tab[nr].snc_ctx_len %></td>
	  <td class="sapTbvCellStd"><%= icm_conn_tab[nr].ready4failover %>/<%= icm_conn_tab[nr].allowed4failover %></td>
	  <td class="sapTbvCellStd"><%= icm_conn_tab[nr].disconnect_time %></td>
	  <td class="sapTbvCellStd"><%= icm_conn_tab[nr].nihdl %>/<%= icm_conn_tab[nr].socket %></td>
	</tr>	
<%
	  }
	}
%>
      </table>
      <br>
      <table border=0 cellspacing=1 cellpadding=0 class="sapTbvAlt">
	<tr>
	  <td class="sapTbvCellAlt" Colspan="9">
	    <b><i>Active Proxy Connections </i></b>
	  </td>
	  <td class="sapTbvCellAlt" align="right">
	    <a href="javascript:parent.frames['main'].location.reload()" class="sapBtnEmph"><nobr>Refresh</nobr></a>
	  </td>
	</tr>
	<tr>
	  <th align="left" class="sapTbvCellAlt">
	    <i>No.</i>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=conn&dir=<%=dir%>" title="Sort by unique connection identifier">
		<i>Conn ID</i> </a>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=role&dir=<%=dir%>" title="Sort by incoming (server) or outgoing (client) connection"><i>Role</i> </a>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=addr_peer&dir=<%=dir%>" title="Sort by IP address of the client">
		<i>Peer Addr</i></a>
	    :
	    <a href="./show_pconns.icp?sstr=port_peer&dir=<%=dir%>" title="Sort by port number of the client">
		<i>Port</i></a>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=addr_local&dir=<%=dir%>" title="Sort by local IP address of the connection">
		<i>Local Addr</i></a>
	    :
	    <a href="./show_pconns.icp?sstr=port_local&dir=<%=dir%>" title="Sort by local port number of the connection">
		<i>Port</i></a>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=flags&dir=<%=dir%>" title="Sort by flags"><i>Flags</i></a>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=partner&dir=<%=dir%>" title="Sort by partner"><i>partner/client</i></a>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=obj_id&dir=<%=dir%>" title="Sort by the Object Identifier"><i>Object identifier</i></a>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=tid&dir=<%=dir%>" title="Sort by Terminal ID"><i>tid/uid/mode</i></a>
	  </th>
	  <th align="left" class="sapTbvCellAlt">
	    <a href="./show_pconns.icp?sstr=nihdl&dir=<%=dir%>" title="Sort by internal Network Interface Identifier for this connection">
	<i>NI/socket</i> </a>
	  </th>
	</tr>
<%
        max = arraylen(icm_conn_tab);
	for (nr = 0; nr < max; nr++) {
	  if (icm_conn_tab[nr].partner != 8) {
%>
	<tr>
	  <td class="sapTbvCellStd"><%= nr %></td>
	  <td class="sapTbvCellStd">
	    (<%= icm_conn_tab[nr].conn %>/<%= icm_conn_tab[nr].guid %>)
	  </td>
	  <td class="sapTbvCellStd"><%= icm_conn_tab[nr].role %></td>
	  <td class="sapTbvCellStd">
	    <%= icm_conn_tab[nr].addr_peer %>:<%= icm_conn_tab[nr].port_peer %>
	  </td>
	  <td class="sapTbvCellStd">
	    <%= icm_conn_tab[nr].addr_local %>:<%= icm_conn_tab[nr].port_local %>
	  </td>
	  <td class="sapTbvCellStd"><%= icm_conn_tab[nr].flags %></td>
	  <td class="sapTbvCellStd"><%= get_partner(icm_conn_tab[nr].partner)%>/<%= icm_conn_tab[nr].client_no %></td>
	  <td class="sapTbvCellStd"><%= icm_conn_tab[nr].obj_id %></td>
	  <td class="sapTbvCellStd"><%= icm_conn_tab[nr].tid %>/
		<%= icm_conn_tab[nr].uid %>/
		<%= icm_conn_tab[nr].mode %></td>
	  <td class="sapTbvCellStd"><%= icm_conn_tab[nr].nihdl %>/<%= icm_conn_tab[nr].socket %></td>
	</tr>
<%
	  }
	}
%>
      </table>

    </body>
  </html>