Commit 11f4b82e3cd5786d0c08fa96c782d0ba751b891c
1 parent
6c517eb6
Exists in
master
and in
5 other branches
Migração para multi-sessão, mais ajustes. Migrando gtkbox para versão 3
Showing
7 changed files
with
164 additions
and
128 deletions
Show diff stats
src/include/lib3270/session.h
... | ... | @@ -36,6 +36,7 @@ |
36 | 36 | |
37 | 37 | #define LIB3270_LUNAME_LENGTH 16 |
38 | 38 | #define LIB3270_FULL_MODEL_NAME_LENGTH 13 |
39 | + #define LIB3270_LU_MAX 32 | |
39 | 40 | |
40 | 41 | #define LIB3270_TELNET_N_OPTS 256 |
41 | 42 | |
... | ... | @@ -207,6 +208,8 @@ |
207 | 208 | char * proxy_host; |
208 | 209 | char * proxy_portname; |
209 | 210 | unsigned short proxy_port; |
211 | + char reported_lu[LIB3270_LU_MAX+1]; | |
212 | + char reported_type[LIB3270_LU_MAX+1]; | |
210 | 213 | |
211 | 214 | enum |
212 | 215 | { | ... | ... |
src/lib3270/telnet.c
... | ... | @@ -215,14 +215,14 @@ static void check_linemode(H3270 *hSession, Boolean init); |
215 | 215 | static int non_blocking(H3270 *session, Boolean on); |
216 | 216 | static void net_connected(H3270 *session); |
217 | 217 | #if defined(X3270_TN3270E) /*[*/ |
218 | -static int tn3270e_negotiate(void); | |
218 | +static int tn3270e_negotiate(H3270 *hSession); | |
219 | 219 | #endif /*]*/ |
220 | 220 | static int process_eor(void); |
221 | 221 | #if defined(X3270_TN3270E) /*[*/ |
222 | 222 | #if defined(X3270_TRACE) /*[*/ |
223 | 223 | static const char *tn3270e_function_names(const unsigned char *, int); |
224 | 224 | #endif /*]*/ |
225 | -static void tn3270e_subneg_send(unsigned char, unsigned long); | |
225 | +static void tn3270e_subneg_send(H3270 *hSession, unsigned char, unsigned long); | |
226 | 226 | static unsigned long tn3270e_fdecode(const unsigned char *, int); |
227 | 227 | static void tn3270e_ack(void); |
228 | 228 | static void tn3270e_nak(enum pds); |
... | ... | @@ -240,7 +240,7 @@ static void do_eof(char c); |
240 | 240 | static void do_eol(char c); |
241 | 241 | static void do_lnext(char c); |
242 | 242 | static char parse_ctlchar(char *s); |
243 | -static void cooked_init(void); | |
243 | +static void cooked_init(H3270 *hSession); | |
244 | 244 | #endif /*]*/ |
245 | 245 | |
246 | 246 | #if defined(X3270_TRACE) /*[*/ |
... | ... | @@ -1149,8 +1149,7 @@ set16(char *buf, int n) |
1149 | 1149 | * send_naws |
1150 | 1150 | * Send a Telnet window size sub-option negotation. |
1151 | 1151 | */ |
1152 | -static void | |
1153 | -send_naws(void) | |
1152 | +static void send_naws(H3270 *hSession) | |
1154 | 1153 | { |
1155 | 1154 | char naws_msg[14]; |
1156 | 1155 | int naws_len = 0; |
... | ... | @@ -1161,18 +1160,17 @@ send_naws(void) |
1161 | 1160 | naws_len += set16(naws_msg + naws_len, XMIT_ROWS); |
1162 | 1161 | (void) sprintf(naws_msg + naws_len, "%c%c", IAC, SE); |
1163 | 1162 | naws_len += 2; |
1164 | - net_rawout(&h3270,(unsigned char *)naws_msg, naws_len); | |
1163 | + net_rawout(hSession,(unsigned char *)naws_msg, naws_len); | |
1165 | 1164 | trace_dsn("SENT %s NAWS %d %d %s\n", cmd(SB), XMIT_COLS, XMIT_ROWS, cmd(SE)); |
1166 | 1165 | } |
1167 | 1166 | |
1168 | 1167 | |
1169 | 1168 | |
1170 | 1169 | /* Advance 'try_lu' to the next desired LU name. */ |
1171 | -static void | |
1172 | -next_lu(void) | |
1170 | +static void next_lu(H3270 *hSession) | |
1173 | 1171 | { |
1174 | - if (h3270.curr_lu != (char **)NULL && (h3270.try_lu = *++h3270.curr_lu) == CN) | |
1175 | - h3270.curr_lu = (char **)NULL; | |
1172 | + if (hSession->curr_lu != (char **)NULL && (hSession->try_lu = *++hSession->curr_lu) == CN) | |
1173 | + hSession->curr_lu = (char **)NULL; | |
1176 | 1174 | } |
1177 | 1175 | |
1178 | 1176 | /* |
... | ... | @@ -1202,7 +1200,7 @@ static int telnet_fsm(H3270 *session, unsigned char c) |
1202 | 1200 | if (IN_NEITHER) { /* now can assume ANSI mode */ |
1203 | 1201 | #if defined(X3270_ANSI)/*[*/ |
1204 | 1202 | if (session->linemode) |
1205 | - cooked_init(); | |
1203 | + cooked_init(session); | |
1206 | 1204 | #endif /*]*/ |
1207 | 1205 | host_in3270(session,CONNECTED_ANSI); |
1208 | 1206 | kybdlock_clr(session,KL_AWAITING_FIRST, "telnet_fsm"); |
... | ... | @@ -1393,7 +1391,7 @@ static int telnet_fsm(H3270 *session, unsigned char c) |
1393 | 1391 | check_linemode(&h3270,False); |
1394 | 1392 | } |
1395 | 1393 | if (c == TELOPT_NAWS) |
1396 | - send_naws(); | |
1394 | + send_naws(&h3270); | |
1397 | 1395 | #if defined(HAVE_LIBSSL) /*[*/ |
1398 | 1396 | if (c == TELOPT_STARTTLS) { |
1399 | 1397 | static unsigned char follows_msg[] = { |
... | ... | @@ -1485,12 +1483,12 @@ static int telnet_fsm(H3270 *session, unsigned char c) |
1485 | 1483 | lib3270_free(tt_out); |
1486 | 1484 | |
1487 | 1485 | /* Advance to the next LU name. */ |
1488 | - next_lu(); | |
1486 | + next_lu(&h3270); | |
1489 | 1487 | } |
1490 | 1488 | #if defined(X3270_TN3270E) /*[*/ |
1491 | 1489 | else if (h3270.myopts[TELOPT_TN3270E] && |
1492 | 1490 | h3270.sbbuf[0] == TELOPT_TN3270E) { |
1493 | - if (tn3270e_negotiate()) | |
1491 | + if (tn3270e_negotiate(&h3270)) | |
1494 | 1492 | return -1; |
1495 | 1493 | } |
1496 | 1494 | #endif /*]*/ |
... | ... | @@ -1575,35 +1573,35 @@ backoff_tn3270e(const char *why) |
1575 | 1573 | * Negotiation of TN3270E options. |
1576 | 1574 | * Returns 0 if okay, -1 if we have to give up altogether. |
1577 | 1575 | */ |
1578 | -static int | |
1579 | -tn3270e_negotiate(void) | |
1576 | +static int tn3270e_negotiate(H3270 *hSession) | |
1580 | 1577 | { |
1581 | -#define LU_MAX 32 | |
1582 | - static char reported_lu[LU_MAX+1]; | |
1583 | - static char reported_type[LU_MAX+1]; | |
1578 | +// #define LU_MAX 32 | |
1579 | +// static char reported_lu[LU_MAX+1]; | |
1580 | +// static char reported_type[LU_MAX+1]; | |
1581 | + | |
1584 | 1582 | int sblen; |
1585 | 1583 | unsigned long e_rcvd; |
1586 | 1584 | |
1587 | 1585 | /* Find out how long the subnegotiation buffer is. */ |
1588 | 1586 | for (sblen = 0; ; sblen++) { |
1589 | - if (h3270.sbbuf[sblen] == SE) | |
1587 | + if (hSession->sbbuf[sblen] == SE) | |
1590 | 1588 | break; |
1591 | 1589 | } |
1592 | 1590 | |
1593 | 1591 | trace_dsn("TN3270E "); |
1594 | 1592 | |
1595 | - switch (h3270.sbbuf[1]) { | |
1593 | + switch (hSession->sbbuf[1]) { | |
1596 | 1594 | |
1597 | 1595 | case TN3270E_OP_SEND: |
1598 | 1596 | |
1599 | - if (h3270.sbbuf[2] == TN3270E_OP_DEVICE_TYPE) { | |
1597 | + if (hSession->sbbuf[2] == TN3270E_OP_DEVICE_TYPE) { | |
1600 | 1598 | |
1601 | 1599 | /* Host wants us to send our device type. */ |
1602 | 1600 | trace_dsn("SEND DEVICE-TYPE SE\n"); |
1603 | 1601 | |
1604 | 1602 | tn3270e_request(); |
1605 | 1603 | } else { |
1606 | - trace_dsn("SEND ??%u SE\n", h3270.sbbuf[2]); | |
1604 | + trace_dsn("SEND ??%u SE\n", hSession->sbbuf[2]); | |
1607 | 1605 | } |
1608 | 1606 | break; |
1609 | 1607 | |
... | ... | @@ -1612,7 +1610,7 @@ tn3270e_negotiate(void) |
1612 | 1610 | /* Device type negotiation. */ |
1613 | 1611 | trace_dsn("DEVICE-TYPE "); |
1614 | 1612 | |
1615 | - switch (h3270.sbbuf[2]) { | |
1613 | + switch (hSession->sbbuf[2]) { | |
1616 | 1614 | case TN3270E_OP_IS: { |
1617 | 1615 | int tnlen, snlen; |
1618 | 1616 | |
... | ... | @@ -1620,57 +1618,55 @@ tn3270e_negotiate(void) |
1620 | 1618 | |
1621 | 1619 | /* Isolate the terminal type and session. */ |
1622 | 1620 | tnlen = 0; |
1623 | - while (h3270.sbbuf[3+tnlen] != SE && | |
1624 | - h3270.sbbuf[3+tnlen] != TN3270E_OP_CONNECT) | |
1621 | + while (hSession->sbbuf[3+tnlen] != SE && | |
1622 | + hSession->sbbuf[3+tnlen] != TN3270E_OP_CONNECT) | |
1625 | 1623 | tnlen++; |
1626 | 1624 | snlen = 0; |
1627 | - if (h3270.sbbuf[3+tnlen] == TN3270E_OP_CONNECT) { | |
1628 | - while(h3270.sbbuf[3+tnlen+1+snlen] != SE) | |
1625 | + if (hSession->sbbuf[3+tnlen] == TN3270E_OP_CONNECT) { | |
1626 | + while(hSession->sbbuf[3+tnlen+1+snlen] != SE) | |
1629 | 1627 | snlen++; |
1630 | 1628 | } |
1631 | 1629 | trace_dsn("IS %.*s CONNECT %.*s SE\n", |
1632 | - tnlen, &h3270.sbbuf[3], | |
1633 | - snlen, &h3270.sbbuf[3+tnlen+1]); | |
1630 | + tnlen, &hSession->sbbuf[3], | |
1631 | + snlen, &hSession->sbbuf[3+tnlen+1]); | |
1634 | 1632 | |
1635 | 1633 | /* Remember the LU. */ |
1636 | 1634 | if (tnlen) { |
1637 | - if (tnlen > LU_MAX) | |
1638 | - tnlen = LU_MAX; | |
1639 | - (void)strncpy(reported_type, | |
1640 | - (char *)&h3270.sbbuf[3], tnlen); | |
1641 | - reported_type[tnlen] = '\0'; | |
1642 | - h3270.connected_type = reported_type; | |
1635 | + if (tnlen > LIB3270_LU_MAX) | |
1636 | + tnlen = LIB3270_LU_MAX; | |
1637 | + (void)strncpy(hSession->reported_type,(char *)&hSession->sbbuf[3], tnlen); | |
1638 | + hSession->reported_type[tnlen] = '\0'; | |
1639 | + hSession->connected_type = hSession->reported_type; | |
1643 | 1640 | } |
1644 | 1641 | if (snlen) { |
1645 | - if (snlen > LU_MAX) | |
1646 | - snlen = LU_MAX; | |
1647 | - (void)strncpy(reported_lu, | |
1648 | - (char *)&h3270.sbbuf[3+tnlen+1], snlen); | |
1649 | - reported_lu[snlen] = '\0'; | |
1650 | - h3270.connected_lu = reported_lu; | |
1651 | - status_lu(&h3270,h3270.connected_lu); | |
1642 | + if (snlen > LIB3270_LU_MAX) | |
1643 | + snlen = LIB3270_LU_MAX; | |
1644 | + (void)strncpy(hSession->reported_lu,(char *)&hSession->sbbuf[3+tnlen+1], snlen); | |
1645 | + hSession->reported_lu[snlen] = '\0'; | |
1646 | + hSession->connected_lu = hSession->reported_lu; | |
1647 | + status_lu(hSession,hSession->connected_lu); | |
1652 | 1648 | } |
1653 | 1649 | |
1654 | 1650 | /* Tell them what we can do. */ |
1655 | - tn3270e_subneg_send(TN3270E_OP_REQUEST, h3270.e_funcs); | |
1651 | + tn3270e_subneg_send(hSession, TN3270E_OP_REQUEST, hSession->e_funcs); | |
1656 | 1652 | break; |
1657 | 1653 | } |
1658 | 1654 | case TN3270E_OP_REJECT: |
1659 | 1655 | |
1660 | 1656 | /* Device type failure. */ |
1661 | 1657 | |
1662 | - trace_dsn("REJECT REASON %s SE\n", rsn(h3270.sbbuf[4])); | |
1663 | - if (h3270.sbbuf[4] == TN3270E_REASON_INV_DEVICE_TYPE || | |
1664 | - h3270.sbbuf[4] == TN3270E_REASON_UNSUPPORTED_REQ) { | |
1658 | + trace_dsn("REJECT REASON %s SE\n", rsn(hSession->sbbuf[4])); | |
1659 | + if (hSession->sbbuf[4] == TN3270E_REASON_INV_DEVICE_TYPE || | |
1660 | + hSession->sbbuf[4] == TN3270E_REASON_UNSUPPORTED_REQ) { | |
1665 | 1661 | backoff_tn3270e(_( "Host rejected device type or request type" )); |
1666 | 1662 | break; |
1667 | 1663 | } |
1668 | 1664 | |
1669 | - next_lu(); | |
1670 | - if (h3270.try_lu != CN) { | |
1665 | + next_lu(hSession); | |
1666 | + if (hSession->try_lu != CN) { | |
1671 | 1667 | /* Try the next LU. */ |
1672 | 1668 | tn3270e_request(); |
1673 | - } else if (h3270.lus != (char **)NULL) { | |
1669 | + } else if (hSession->lus != (char **)NULL) { | |
1674 | 1670 | /* No more LUs to try. Give up. */ |
1675 | 1671 | backoff_tn3270e(_("Host rejected resource(s)")); |
1676 | 1672 | } else { |
... | ... | @@ -1679,7 +1675,7 @@ tn3270e_negotiate(void) |
1679 | 1675 | |
1680 | 1676 | break; |
1681 | 1677 | default: |
1682 | - trace_dsn("??%u SE\n", h3270.sbbuf[2]); | |
1678 | + trace_dsn("??%u SE\n", hSession->sbbuf[2]); | |
1683 | 1679 | break; |
1684 | 1680 | } |
1685 | 1681 | break; |
... | ... | @@ -1689,46 +1685,45 @@ tn3270e_negotiate(void) |
1689 | 1685 | /* Functions negotiation. */ |
1690 | 1686 | trace_dsn("FUNCTIONS "); |
1691 | 1687 | |
1692 | - switch (h3270.sbbuf[2]) { | |
1688 | + switch (hSession->sbbuf[2]) { | |
1693 | 1689 | |
1694 | 1690 | case TN3270E_OP_REQUEST: |
1695 | 1691 | |
1696 | 1692 | /* Host is telling us what functions they want. */ |
1697 | 1693 | trace_dsn("REQUEST %s SE\n", |
1698 | - tn3270e_function_names(h3270.sbbuf+3, sblen-3)); | |
1694 | + tn3270e_function_names(hSession->sbbuf+3, sblen-3)); | |
1699 | 1695 | |
1700 | - e_rcvd = tn3270e_fdecode(h3270.sbbuf+3, sblen-3); | |
1701 | - if ((e_rcvd == h3270.e_funcs) || (h3270.e_funcs & ~e_rcvd)) { | |
1696 | + e_rcvd = tn3270e_fdecode(hSession->sbbuf+3, sblen-3); | |
1697 | + if ((e_rcvd == hSession->e_funcs) || (hSession->e_funcs & ~e_rcvd)) { | |
1702 | 1698 | /* They want what we want, or less. Done. */ |
1703 | - h3270.e_funcs = e_rcvd; | |
1704 | - tn3270e_subneg_send(TN3270E_OP_IS, h3270.e_funcs); | |
1705 | - h3270.tn3270e_negotiated = 1; | |
1699 | + hSession->e_funcs = e_rcvd; | |
1700 | + tn3270e_subneg_send(hSession, TN3270E_OP_IS, hSession->e_funcs); | |
1701 | + hSession->tn3270e_negotiated = 1; | |
1706 | 1702 | trace_dsn("TN3270E option negotiation complete.\n"); |
1707 | - check_in3270(&h3270); | |
1703 | + check_in3270(hSession); | |
1708 | 1704 | } else { |
1709 | 1705 | /* |
1710 | 1706 | * They want us to do something we can't. |
1711 | 1707 | * Request the common subset. |
1712 | 1708 | */ |
1713 | - h3270.e_funcs &= e_rcvd; | |
1714 | - tn3270e_subneg_send(TN3270E_OP_REQUEST,h3270.e_funcs); | |
1709 | + hSession->e_funcs &= e_rcvd; | |
1710 | + tn3270e_subneg_send(hSession, TN3270E_OP_REQUEST,hSession->e_funcs); | |
1715 | 1711 | } |
1716 | 1712 | break; |
1717 | 1713 | |
1718 | 1714 | case TN3270E_OP_IS: |
1719 | 1715 | |
1720 | 1716 | /* They accept our last request, or a subset thereof. */ |
1721 | - trace_dsn("IS %s SE\n", | |
1722 | - tn3270e_function_names(h3270.sbbuf+3, sblen-3)); | |
1723 | - e_rcvd = tn3270e_fdecode(h3270.sbbuf+3, sblen-3); | |
1724 | - if (e_rcvd != h3270.e_funcs) { | |
1725 | - if (h3270.e_funcs & ~e_rcvd) { | |
1717 | + trace_dsn("IS %s SE\n",tn3270e_function_names(hSession->sbbuf+3, sblen-3)); | |
1718 | + e_rcvd = tn3270e_fdecode(hSession->sbbuf+3, sblen-3); | |
1719 | + if (e_rcvd != hSession->e_funcs) { | |
1720 | + if (hSession->e_funcs & ~e_rcvd) { | |
1726 | 1721 | /* |
1727 | 1722 | * They've removed something. This is |
1728 | 1723 | * technically illegal, but we can |
1729 | 1724 | * live with it. |
1730 | 1725 | */ |
1731 | - h3270.e_funcs = e_rcvd; | |
1726 | + hSession->e_funcs = e_rcvd; | |
1732 | 1727 | } else { |
1733 | 1728 | /* |
1734 | 1729 | * They've added something. Abandon |
... | ... | @@ -1738,19 +1733,19 @@ tn3270e_negotiate(void) |
1738 | 1733 | break; |
1739 | 1734 | } |
1740 | 1735 | } |
1741 | - h3270.tn3270e_negotiated = 1; | |
1736 | + hSession->tn3270e_negotiated = 1; | |
1742 | 1737 | trace_dsn("TN3270E option negotiation complete.\n"); |
1743 | - check_in3270(&h3270); | |
1738 | + check_in3270(hSession); | |
1744 | 1739 | break; |
1745 | 1740 | |
1746 | 1741 | default: |
1747 | - trace_dsn("??%u SE\n", h3270.sbbuf[2]); | |
1742 | + trace_dsn("??%u SE\n", hSession->sbbuf[2]); | |
1748 | 1743 | break; |
1749 | 1744 | } |
1750 | 1745 | break; |
1751 | 1746 | |
1752 | 1747 | default: |
1753 | - trace_dsn("??%u SE\n", h3270.sbbuf[1]); | |
1748 | + trace_dsn("??%u SE\n", hSession->sbbuf[1]); | |
1754 | 1749 | } |
1755 | 1750 | |
1756 | 1751 | /* Good enough for now. */ |
... | ... | @@ -1776,7 +1771,7 @@ tn3270e_function_names(const unsigned char *buf, int len) |
1776 | 1771 | } |
1777 | 1772 | #endif /*]*/ |
1778 | 1773 | |
1779 | -/* Expand the current TN3270E function codes into text. */ | |
1774 | +/* Expand the current TN3270E function codes into text. */ /* | |
1780 | 1775 | const char * |
1781 | 1776 | tn3270e_current_opts(void) |
1782 | 1777 | { |
... | ... | @@ -1793,10 +1788,10 @@ tn3270e_current_opts(void) |
1793 | 1788 | } |
1794 | 1789 | return text_buf; |
1795 | 1790 | } |
1791 | +*/ | |
1796 | 1792 | |
1797 | 1793 | /* Transmit a TN3270E FUNCTIONS REQUEST or FUNCTIONS IS message. */ |
1798 | -static void | |
1799 | -tn3270e_subneg_send(unsigned char op, unsigned long funcs) | |
1794 | +static void tn3270e_subneg_send(H3270 *hSession, unsigned char op, unsigned long funcs) | |
1800 | 1795 | { |
1801 | 1796 | unsigned char proto_buf[7 + 32]; |
1802 | 1797 | int proto_len; |
... | ... | @@ -1814,7 +1809,7 @@ tn3270e_subneg_send(unsigned char op, unsigned long funcs) |
1814 | 1809 | /* Complete and send out the protocol message. */ |
1815 | 1810 | proto_buf[proto_len++] = IAC; |
1816 | 1811 | proto_buf[proto_len++] = SE; |
1817 | - net_rawout(&h3270, proto_buf, proto_len); | |
1812 | + net_rawout(hSession, proto_buf, proto_len); | |
1818 | 1813 | |
1819 | 1814 | /* Complete and send out the trace text. */ |
1820 | 1815 | trace_dsn("SENT %s %s FUNCTIONS %s %s %s\n", |
... | ... | @@ -1841,12 +1836,11 @@ tn3270e_fdecode(const unsigned char *buf, int len) |
1841 | 1836 | #endif /*]*/ |
1842 | 1837 | |
1843 | 1838 | #if defined(X3270_TN3270E) /*[*/ |
1844 | -static void | |
1845 | -process_bind(unsigned char *buf, int buflen) | |
1839 | +static void process_bind(H3270 *hSession, unsigned char *buf, int buflen) | |
1846 | 1840 | { |
1847 | 1841 | int namelen, i; |
1848 | 1842 | |
1849 | - (void) memset(h3270.plu_name, '\0', sizeof(h3270.plu_name)); | |
1843 | + (void) memset(hSession->plu_name, '\0', sizeof(hSession->plu_name)); | |
1850 | 1844 | |
1851 | 1845 | /* Make sure it's a BIND. */ |
1852 | 1846 | if (buflen < 1 || buf[0] != BIND_RU) { |
... | ... | @@ -1862,7 +1856,7 @@ process_bind(unsigned char *buf, int buflen) |
1862 | 1856 | if (namelen > BIND_PLU_NAME_MAX) |
1863 | 1857 | namelen = BIND_PLU_NAME_MAX; |
1864 | 1858 | for (i = 0; i < namelen; i++) { |
1865 | - h3270.plu_name[i] = ebc2asc0[buf[BIND_OFF_PLU_NAME + i]]; | |
1859 | + hSession->plu_name[i] = ebc2asc0[buf[BIND_OFF_PLU_NAME + i]]; | |
1866 | 1860 | } |
1867 | 1861 | } |
1868 | 1862 | #endif /*]*/ |
... | ... | @@ -1906,7 +1900,7 @@ process_eor(void) |
1906 | 1900 | case TN3270E_DT_BIND_IMAGE: |
1907 | 1901 | if (!(h3270.e_funcs & E_OPT(TN3270E_FUNC_BIND_IMAGE))) |
1908 | 1902 | return 0; |
1909 | - process_bind(h3270.ibuf + EH_SIZE, (h3270.ibptr - h3270.ibuf) - EH_SIZE); | |
1903 | + process_bind(&h3270, h3270.ibuf + EH_SIZE, (h3270.ibptr - h3270.ibuf) - EH_SIZE); | |
1910 | 1904 | trace_dsn("< BIND PLU-name '%s'\n", h3270.plu_name); |
1911 | 1905 | h3270.tn3270e_bound = 1; |
1912 | 1906 | check_in3270(&h3270); |
... | ... | @@ -2051,14 +2045,14 @@ net_rawout(H3270 *session, unsigned const char *buf, int len) |
2051 | 2045 | return; |
2052 | 2046 | } |
2053 | 2047 | } |
2054 | - h3270.ns_bsent += nw; | |
2048 | + session->ns_bsent += nw; | |
2055 | 2049 | len -= nw; |
2056 | 2050 | buf += nw; |
2057 | 2051 | bot: |
2058 | -#if defined(OMTU) /*[*/ | |
2052 | +#if defined(OMTU) | |
2059 | 2053 | if (pause) |
2060 | 2054 | sleep(1); |
2061 | -#endif /*]*/ | |
2055 | +#endif | |
2062 | 2056 | ; |
2063 | 2057 | } |
2064 | 2058 | } |
... | ... | @@ -2069,7 +2063,7 @@ net_rawout(H3270 *session, unsigned const char *buf, int len) |
2069 | 2063 | * net_hexansi_out |
2070 | 2064 | * Send uncontrolled user data to the host in ANSI mode, performing IAC |
2071 | 2065 | * and CR quoting as necessary. |
2072 | - */ | |
2066 | + */ /* | |
2073 | 2067 | void |
2074 | 2068 | net_hexansi_out(unsigned char *buf, int len) |
2075 | 2069 | { |
... | ... | @@ -2079,8 +2073,8 @@ net_hexansi_out(unsigned char *buf, int len) |
2079 | 2073 | if (!len) |
2080 | 2074 | return; |
2081 | 2075 | |
2082 | -#if defined(X3270_TRACE) /*[*/ | |
2083 | - /* Trace the data. */ | |
2076 | +#if defined(X3270_TRACE) | |
2077 | + // Trace the data. | |
2084 | 2078 | if (lib3270_get_toggle(&h3270,LIB3270_TOGGLE_DS_TRACE)) { |
2085 | 2079 | int i; |
2086 | 2080 | |
... | ... | @@ -2089,9 +2083,9 @@ net_hexansi_out(unsigned char *buf, int len) |
2089 | 2083 | trace_dsn(" %s", ctl_see((int) *(buf+i))); |
2090 | 2084 | trace_dsn("\n"); |
2091 | 2085 | } |
2092 | -#endif /*]*/ | |
2086 | +#endif | |
2093 | 2087 | |
2094 | - /* Expand it. */ | |
2088 | + // Expand it | |
2095 | 2089 | tbuf = xbuf = (unsigned char *)lib3270_malloc(2*len); |
2096 | 2090 | while (len) { |
2097 | 2091 | unsigned char c = *buf++; |
... | ... | @@ -2104,10 +2098,11 @@ net_hexansi_out(unsigned char *buf, int len) |
2104 | 2098 | *tbuf++ = '\0'; |
2105 | 2099 | } |
2106 | 2100 | |
2107 | - /* Send it to the host. */ | |
2101 | + // Send it to the host | |
2108 | 2102 | net_rawout(&h3270,xbuf, tbuf - xbuf); |
2109 | 2103 | lib3270_free(xbuf); |
2110 | 2104 | } |
2105 | +*/ | |
2111 | 2106 | |
2112 | 2107 | /* |
2113 | 2108 | * net_cookedout |
... | ... | @@ -2195,14 +2190,13 @@ static void net_cookout(H3270 *hSession, const char *buf, int len) |
2195 | 2190 | * Cooked mode input processing. |
2196 | 2191 | */ |
2197 | 2192 | |
2198 | -static void | |
2199 | -cooked_init(void) | |
2193 | +static void cooked_init(H3270 *hSession) | |
2200 | 2194 | { |
2201 | - if (h3270.lbuf == (unsigned char *)NULL) | |
2202 | - h3270.lbuf = (unsigned char *)lib3270_malloc(BUFSZ); | |
2203 | - h3270.lbptr = h3270.lbuf; | |
2204 | - h3270.lnext = 0; | |
2205 | - h3270.backslashed = 0; | |
2195 | + if (hSession->lbuf == (unsigned char *)NULL) | |
2196 | + hSession->lbuf = (unsigned char *)lib3270_malloc(BUFSZ); | |
2197 | + hSession->lbptr = hSession->lbuf; | |
2198 | + hSession->lnext = 0; | |
2199 | + hSession->backslashed = 0; | |
2206 | 2200 | } |
2207 | 2201 | |
2208 | 2202 | static void |
... | ... | @@ -2216,7 +2210,7 @@ static void |
2216 | 2210 | forward_data(void) |
2217 | 2211 | { |
2218 | 2212 | net_cookedout(&h3270, (char *) h3270.lbuf, h3270.lbptr - h3270.lbuf); |
2219 | - cooked_init(); | |
2213 | + cooked_init(&h3270); | |
2220 | 2214 | } |
2221 | 2215 | |
2222 | 2216 | static void |
... | ... | @@ -2244,7 +2238,7 @@ static void do_intr(H3270 *hSession, char c) |
2244 | 2238 | return; |
2245 | 2239 | } |
2246 | 2240 | ansi_process_s(ctl_see((int) c)); |
2247 | - cooked_init(); | |
2241 | + cooked_init(hSession); | |
2248 | 2242 | net_interrupt(); |
2249 | 2243 | } |
2250 | 2244 | |
... | ... | @@ -2256,7 +2250,7 @@ static void do_quit(H3270 *hSession, char c) |
2256 | 2250 | return; |
2257 | 2251 | } |
2258 | 2252 | ansi_process_s(ctl_see((int) c)); |
2259 | - cooked_init(); | |
2253 | + cooked_init(hSession); | |
2260 | 2254 | net_break(); |
2261 | 2255 | } |
2262 | 2256 | |
... | ... | @@ -2422,10 +2416,10 @@ check_in3270(H3270 *session) |
2422 | 2416 | #endif /*]*/ |
2423 | 2417 | |
2424 | 2418 | #if defined(X3270_TN3270E) /*[*/ |
2425 | - if (h3270.myopts[TELOPT_TN3270E]) { | |
2426 | - if (!h3270.tn3270e_negotiated) | |
2419 | + if (session->myopts[TELOPT_TN3270E]) { | |
2420 | + if (!session->tn3270e_negotiated) | |
2427 | 2421 | new_cstate = CONNECTED_INITIAL_E; |
2428 | - else switch (h3270.tn3270e_submode) { | |
2422 | + else switch (session->tn3270e_submode) { | |
2429 | 2423 | case E_NONE: |
2430 | 2424 | new_cstate = CONNECTED_INITIAL_E; |
2431 | 2425 | break; |
... | ... | @@ -2441,11 +2435,11 @@ check_in3270(H3270 *session) |
2441 | 2435 | } |
2442 | 2436 | } else |
2443 | 2437 | #endif /*]*/ |
2444 | - if (h3270.myopts[TELOPT_BINARY] && | |
2445 | - h3270.myopts[TELOPT_EOR] && | |
2446 | - h3270.myopts[TELOPT_TTYPE] && | |
2447 | - h3270.hisopts[TELOPT_BINARY] && | |
2448 | - h3270.hisopts[TELOPT_EOR]) { | |
2438 | + if (session->myopts[TELOPT_BINARY] && | |
2439 | + session->myopts[TELOPT_EOR] && | |
2440 | + session->myopts[TELOPT_TTYPE] && | |
2441 | + session->hisopts[TELOPT_BINARY] && | |
2442 | + session->hisopts[TELOPT_EOR]) { | |
2449 | 2443 | new_cstate = CONNECTED_3270; |
2450 | 2444 | } else if (session->cstate == CONNECTED_INITIAL) { |
2451 | 2445 | /* Nothing has happened, yet. */ |
... | ... | @@ -2465,33 +2459,33 @@ check_in3270(H3270 *session) |
2465 | 2459 | * TN3270E mode, reset the LU list so we can try again |
2466 | 2460 | * in the new mode. |
2467 | 2461 | */ |
2468 | - if (h3270.lus != (char **)NULL && was_in_e != IN_E) { | |
2469 | - h3270.curr_lu = h3270.lus; | |
2470 | - h3270.try_lu = *h3270.curr_lu; | |
2462 | + if (session->lus != (char **)NULL && was_in_e != IN_E) { | |
2463 | + session->curr_lu = session->lus; | |
2464 | + session->try_lu = *session->curr_lu; | |
2471 | 2465 | } |
2472 | 2466 | #endif /*]*/ |
2473 | 2467 | |
2474 | 2468 | /* Allocate the initial 3270 input buffer. */ |
2475 | - if(new_cstate >= CONNECTED_INITIAL && !(h3270.ibuf_size && h3270.ibuf)) | |
2469 | + if(new_cstate >= CONNECTED_INITIAL && !(session->ibuf_size && session->ibuf)) | |
2476 | 2470 | { |
2477 | - h3270.ibuf = (unsigned char *) lib3270_malloc(BUFSIZ); | |
2478 | - h3270.ibuf_size = BUFSIZ; | |
2479 | - h3270.ibptr = h3270.ibuf; | |
2471 | + session->ibuf = (unsigned char *) lib3270_malloc(BUFSIZ); | |
2472 | + session->ibuf_size = BUFSIZ; | |
2473 | + session->ibptr = session->ibuf; | |
2480 | 2474 | } |
2481 | 2475 | |
2482 | 2476 | #if defined(X3270_ANSI) /*[*/ |
2483 | 2477 | /* Reinitialize line mode. */ |
2484 | - if ((new_cstate == CONNECTED_ANSI && h3270.linemode) || | |
2478 | + if ((new_cstate == CONNECTED_ANSI && session->linemode) || | |
2485 | 2479 | new_cstate == CONNECTED_NVT) |
2486 | - cooked_init(); | |
2480 | + cooked_init(session); | |
2487 | 2481 | #endif /*]*/ |
2488 | 2482 | |
2489 | 2483 | #if defined(X3270_TN3270E) /*[*/ |
2490 | 2484 | /* If we fell out of TN3270E, remove the state. */ |
2491 | - if (!h3270.myopts[TELOPT_TN3270E]) { | |
2492 | - h3270.tn3270e_negotiated = 0; | |
2493 | - h3270.tn3270e_submode = E_NONE; | |
2494 | - h3270.tn3270e_bound = 0; | |
2485 | + if (!session->myopts[TELOPT_TN3270E]) { | |
2486 | + session->tn3270e_negotiated = 0; | |
2487 | + session->tn3270e_submode = E_NONE; | |
2488 | + session->tn3270e_bound = 0; | |
2495 | 2489 | } |
2496 | 2490 | #endif /*]*/ |
2497 | 2491 | trace_dsn("Now operating in %s mode.\n",state_name[new_cstate]); |
... | ... | @@ -2575,7 +2569,7 @@ static void check_linemode(H3270 *hSession, Boolean init) |
2575 | 2569 | } |
2576 | 2570 | #if defined(X3270_ANSI) /*[*/ |
2577 | 2571 | if (IN_ANSI && hSession->linemode) |
2578 | - cooked_init(); | |
2572 | + cooked_init(hSession); | |
2579 | 2573 | #endif /*]*/ |
2580 | 2574 | } |
2581 | 2575 | } | ... | ... |
src/lib3270/telnetc.h
... | ... | @@ -37,7 +37,7 @@ LIB3270_INTERNAL void net_charmode(void); |
37 | 37 | LIB3270_INTERNAL int net_connect(H3270 *session, const char *, char *, Boolean, Boolean *, Boolean *); |
38 | 38 | LIB3270_INTERNAL void net_disconnect(H3270 *session); |
39 | 39 | LIB3270_INTERNAL void net_exception(H3270 *session); |
40 | -LIB3270_INTERNAL void net_hexansi_out(unsigned char *buf, int len); | |
40 | +// LIB3270_INTERNAL void net_hexansi_out(unsigned char *buf, int len); | |
41 | 41 | LIB3270_INTERNAL void net_input(H3270 *session); |
42 | 42 | LIB3270_INTERNAL void net_interrupt(void); |
43 | 43 | LIB3270_INTERNAL void net_linemode(void); |
... | ... | @@ -54,7 +54,7 @@ LIB3270_INTERNAL void net_send_kill(void); |
54 | 54 | LIB3270_INTERNAL void net_send_werase(void); |
55 | 55 | LIB3270_INTERNAL Boolean net_snap_options(void); |
56 | 56 | LIB3270_INTERNAL void space3270out(int n); |
57 | -LIB3270_INTERNAL const char *tn3270e_current_opts(void); | |
57 | +// LIB3270_INTERNAL const char *tn3270e_current_opts(void); | |
58 | 58 | LIB3270_INTERNAL char *net_proxy_type(void); |
59 | 59 | LIB3270_INTERNAL char *net_proxy_host(void); |
60 | 60 | LIB3270_INTERNAL char *net_proxy_port(void); | ... | ... |
src/pw3270/colors.c
... | ... | @@ -416,7 +416,12 @@ static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr) |
416 | 416 | GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, |
417 | 417 | GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, |
418 | 418 | NULL ); |
419 | +#if GTK_CHECK_VERSION(3,0,0) | |
420 | + GtkWidget * panned = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2); | |
421 | +#else | |
419 | 422 | GtkWidget * panned = gtk_hbox_new(FALSE,2); |
423 | +#endif // GTK(3,0,0) | |
424 | + | |
420 | 425 | GtkWidget * tree; |
421 | 426 | GtkWidget * color; |
422 | 427 | GdkColor saved[V3270_COLOR_COUNT]; |
... | ... | @@ -489,7 +494,11 @@ static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr) |
489 | 494 | |
490 | 495 | // Color scheme combo |
491 | 496 | { |
497 | +#if GTK_CHECK_VERSION(3,0,0) | |
498 | + GtkWidget * box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2); | |
499 | +#else | |
492 | 500 | GtkWidget * box = gtk_hbox_new(FALSE,2); |
501 | +#endif // GTK(3,0,0) | |
493 | 502 | GtkWidget * button = color_scheme_new(v3270_get_color_table(widget)); |
494 | 503 | |
495 | 504 | g_object_set_data(G_OBJECT(button),"terminal_widget",widget); | ... | ... |
src/pw3270/dialog.c
... | ... | @@ -67,7 +67,12 @@ |
67 | 67 | |
68 | 68 | static void add_option_menus(GtkWidget *widget, GtkAction *action, gchar **encoding) |
69 | 69 | { |
70 | - GtkWidget *box = gtk_hbox_new(FALSE,6); | |
70 | +#if GTK_CHECK_VERSION(3,0,0) | |
71 | + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6); | |
72 | +#else | |
73 | + GtkWidget *box = gtk_hbox_new(FALSE,6); | |
74 | +#endif // GTK(3,0,0) | |
75 | + | |
71 | 76 | gchar *ptr = g_object_get_data(G_OBJECT(action),"charset"); |
72 | 77 | |
73 | 78 | if(ptr) | ... | ... |
src/pw3270/filetransfer.c
... | ... | @@ -482,7 +482,12 @@ static void run_ft_dialog(GObject *action, GtkWidget *widget, struct ftdialog *d |
482 | 482 | GTK_STOCK_CLOSE,GTK_RESPONSE_CLOSE ); |
483 | 483 | |
484 | 484 | |
485 | +#if GTK_CHECK_VERSION(3,0,0) | |
486 | + container = gtk_box_new(GTK_ORIENTATION_VERTICAL,2); | |
487 | +#else | |
485 | 488 | container = gtk_vbox_new(FALSE,2); |
489 | +#endif // GTK(3,0,0) | |
490 | + | |
486 | 491 | gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(ftdialog))),container,TRUE,TRUE,2); |
487 | 492 | |
488 | 493 | // Information frame |
... | ... | @@ -653,7 +658,11 @@ void download_action(GtkAction *action, GtkWidget *widget) |
653 | 658 | |
654 | 659 | { |
655 | 660 | /* Add dft option */ |
656 | - GtkWidget *hbox = gtk_hbox_new(FALSE,2); | |
661 | +#if GTK_CHECK_VERSION(3,0,0) | |
662 | + GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2); | |
663 | +#else | |
664 | + GtkWidget *hbox = gtk_hbox_new(FALSE,2); | |
665 | +#endif // GTK(3,0,0) | |
657 | 666 | GtkWidget *label = NULL; |
658 | 667 | |
659 | 668 | gtk_container_set_border_width(GTK_CONTAINER(hbox),4); |
... | ... | @@ -738,16 +747,27 @@ void upload_action(GtkAction *action, GtkWidget *widget) |
738 | 747 | { N_( "Space allocation units" ), "allocationunits", units } |
739 | 748 | }; |
740 | 749 | |
741 | - GtkWidget *box = gtk_hbox_new(TRUE,2); | |
750 | + | |
742 | 751 | int f; |
743 | 752 | |
753 | +#if GTK_CHECK_VERSION(3,0,0) | |
754 | + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2); | |
755 | +#else | |
756 | + GtkWidget *box = gtk_hbox_new(TRUE,2); | |
757 | +#endif // GTK(3,0,0) | |
758 | + | |
744 | 759 | for(f=0;f<2;f++) |
745 | 760 | { |
746 | 761 | GtkWidget * frame = gtk_frame_new(gettext(fdesk[f].title)); |
747 | - GtkWidget * vbox = gtk_vbox_new(TRUE,2); | |
748 | 762 | GSList * group = NULL; |
749 | 763 | gchar * setup = get_attribute(G_OBJECT(action),&dlg,fdesk[f].name); |
750 | 764 | int p; |
765 | +#if GTK_CHECK_VERSION(3,0,0) | |
766 | + GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2); | |
767 | + gtk_box_set_homogeneous(GTK_BOX(vbox),TRUE); | |
768 | +#else | |
769 | + GtkWidget * vbox = gtk_vbox_new(TRUE,2); | |
770 | +#endif // GTK(3,0,0) | |
751 | 771 | |
752 | 772 | for(p=0;p<4;p++) |
753 | 773 | { | ... | ... |
src/pw3270/uiparser/parser.c
... | ... | @@ -161,8 +161,13 @@ static void release_action_group(GtkActionGroup ** group) |
161 | 161 | void parser_build(struct parser *p, GtkWidget *widget) |
162 | 162 | { |
163 | 163 | struct action_info a_info; |
164 | + | |
165 | +#if GTK_CHECK_VERSION(3,0,0) | |
166 | + GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); | |
167 | +#else | |
164 | 168 | GtkWidget * vbox = gtk_vbox_new(FALSE,0); |
165 | -// GtkWidget * hbox = gtk_hbox_new(FALSE,0); | |
169 | +#endif // GTK(3,0,0) | |
170 | + | |
166 | 171 | GtkWidget * parent; |
167 | 172 | int f; |
168 | 173 | ... | ... |