+struct rawtcp_private {
+ SOCKET s;
+};
+
+static char *rawtcp_init(Session *sess) {
+ struct rawtcp_private *rp;
+
+ sess->back_priv = smalloc(sizeof(struct rawtcp_private));
+ rp = (struct rawtcp_private *)sess->back_priv;
+ rp->s = net_open(sess, sess->cfg.host, sess->cfg.port);
+ if (rp->s == INVALID_SOCKET)
+ fatalbox("Open failed");
+}
+
+static int rawtcp_msg(Session *sess, SOCKET sock, Net_Event_Type ne) {
+ struct rawtcp_private *rp = (struct rawtcp_private *)sess->back_priv;
+
+ switch (ne) {
+ case NE_NULL:
+ break;
+ case NE_OPEN:
+ break;
+ case NE_NOHOST:
+ case NE_REFUSED:
+ case NE_NOOPEN:
+ rp->s = INVALID_SOCKET;
+ fatalbox("Open failed");
+ break;
+ case NE_DATA:
+ break;
+ case NE_URGENT:
+ break;
+ case NE_CLOSING:
+ /* net_close(rp->s);*/
+ break;
+ case NE_CLOSED:
+ rp->s = INVALID_SOCKET;
+ fatalbox("Connection closed");
+ break;
+ case NE_TIMEOUT:
+ case NE_ABORT:
+ case NE_DIED:
+ fatalbox("Connection died");
+ rp->s = INVALID_SOCKET;
+ break;
+ }
+}
+
+
+