Commit 56e3b8230aa287c20335b036f269db5cecb98d50
1 parent
16e7c1d4
Exists in
master
and in
1 other branch
Ajuste no tratamento de hostname para o novo formato de conexão
Showing
1 changed file
with
80 additions
and
6 deletions
Show diff stats
widget.c
@@ -57,6 +57,15 @@ | @@ -57,6 +57,15 @@ | ||
57 | #define CONTENTS_WIDTH(terminal) (cols * terminal->metrics.width) | 57 | #define CONTENTS_WIDTH(terminal) (cols * terminal->metrics.width) |
58 | #define CONTENTS_HEIGHT(terminal) (((rows+1) * terminal->metrics.spacing)+OIA_TOP_MARGIN+2) | 58 | #define CONTENTS_HEIGHT(terminal) (((rows+1) * terminal->metrics.spacing)+OIA_TOP_MARGIN+2) |
59 | 59 | ||
60 | +/** | ||
61 | + * SECTION: v3270 | ||
62 | + * @title: Virtual 3270 widget | ||
63 | + * @short_description: The virtual 3270 terminal widget. | ||
64 | + * | ||
65 | + * Common functions for interact with the 3270 virtual terminal widget. | ||
66 | + * | ||
67 | + */ | ||
68 | + | ||
60 | /*--[ Widget definition ]----------------------------------------------------------------------------*/ | 69 | /*--[ Widget definition ]----------------------------------------------------------------------------*/ |
61 | 70 | ||
62 | G_DEFINE_TYPE(v3270, v3270, GTK_TYPE_WIDGET); | 71 | G_DEFINE_TYPE(v3270, v3270, GTK_TYPE_WIDGET); |
@@ -721,7 +730,7 @@ static void update_connect(H3270 *session, unsigned char connected) | @@ -721,7 +730,7 @@ static void update_connect(H3270 *session, unsigned char connected) | ||
721 | if(connected) | 730 | if(connected) |
722 | { | 731 | { |
723 | widget->cursor.show |= 2; | 732 | widget->cursor.show |= 2; |
724 | - g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[SIGNAL_CONNECTED], 0, session->full_current_host); | 733 | + g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[SIGNAL_CONNECTED], 0, session->host.full); |
725 | } | 734 | } |
726 | else | 735 | else |
727 | { | 736 | { |
@@ -1380,18 +1389,71 @@ H3270 * v3270_get_session(GtkWidget *widget) | @@ -1380,18 +1389,71 @@ H3270 * v3270_get_session(GtkWidget *widget) | ||
1380 | return GTK_V3270(widget)->host; | 1389 | return GTK_V3270(widget)->host; |
1381 | } | 1390 | } |
1382 | 1391 | ||
1383 | -int v3270_connect(GtkWidget *widget, const gchar *host) | 1392 | +int v3270_connect(GtkWidget *widget, const gchar *uri) |
1384 | { | 1393 | { |
1385 | v3270 * terminal; | 1394 | v3270 * terminal; |
1386 | int rc = -1; | 1395 | int rc = -1; |
1387 | 1396 | ||
1388 | - trace("%s widget=%p host=%p",__FUNCTION__,widget,host); | 1397 | + trace("%s widget=%p host=%p",__FUNCTION__,widget,uri); |
1389 | 1398 | ||
1390 | g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL); | 1399 | g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL); |
1391 | 1400 | ||
1392 | terminal = GTK_V3270(widget); | 1401 | terminal = GTK_V3270(widget); |
1393 | 1402 | ||
1394 | - rc = lib3270_connect(terminal->host,host,0); | 1403 | +#ifdef DEBUG |
1404 | + if(uri) | ||
1405 | + { | ||
1406 | + LIB3270_CONNECT_OPTION opt = LIB3270_CONNECT_OPTION_DEFAULTS; | ||
1407 | + gchar * scheme = g_uri_unescape_string(uri,NULL); | ||
1408 | + gchar * hostname = strchr(scheme,':'); | ||
1409 | + gchar * srvc; | ||
1410 | + gchar * query; | ||
1411 | + | ||
1412 | + if(hostname) | ||
1413 | + { | ||
1414 | + *(hostname++) = 0; | ||
1415 | + | ||
1416 | + while(*hostname && !g_ascii_isalnum(*hostname)) | ||
1417 | + hostname++; | ||
1418 | + | ||
1419 | + if(*hostname) | ||
1420 | + { | ||
1421 | + if( ! (g_ascii_strcasecmp(scheme,"l") && g_ascii_strcasecmp(scheme,"ssl")) ) | ||
1422 | + opt |= LIB3270_CONNECT_OPTION_SSL; | ||
1423 | + | ||
1424 | + srvc = strchr(hostname,':'); | ||
1425 | + if(srvc) | ||
1426 | + { | ||
1427 | + *(srvc++) = 0; | ||
1428 | + query = strchr(srvc,'?'); | ||
1429 | + if(query) | ||
1430 | + *(query++) = 0; | ||
1431 | + else | ||
1432 | + query = ""; | ||
1433 | + } | ||
1434 | + else | ||
1435 | + { | ||
1436 | + srvc = "telnet"; | ||
1437 | + } | ||
1438 | + | ||
1439 | + rc = lib3270_connect_host(terminal->host,hostname,srvc,opt); | ||
1440 | + | ||
1441 | + } | ||
1442 | + | ||
1443 | + } | ||
1444 | + | ||
1445 | + | ||
1446 | + g_free(scheme); | ||
1447 | + | ||
1448 | + } | ||
1449 | + else | ||
1450 | + { | ||
1451 | + rc = lib3270_connect(terminal->host,uri,0); | ||
1452 | + } | ||
1453 | + | ||
1454 | +#else | ||
1455 | + rc = lib3270_connect(terminal->host,uri,0); | ||
1456 | +#endif // DEBUG | ||
1395 | 1457 | ||
1396 | trace("%s exits with rc=%d (%s)",__FUNCTION__,rc,strerror(rc)); | 1458 | trace("%s exits with rc=%d (%s)",__FUNCTION__,rc,strerror(rc)); |
1397 | 1459 | ||
@@ -1476,11 +1538,23 @@ gboolean v3270_get_toggle(GtkWidget *widget, LIB3270_TOGGLE ix) | @@ -1476,11 +1538,23 @@ gboolean v3270_get_toggle(GtkWidget *widget, LIB3270_TOGGLE ix) | ||
1476 | return FALSE; | 1538 | return FALSE; |
1477 | } | 1539 | } |
1478 | 1540 | ||
1479 | -void v3270_set_host(GtkWidget *widget, const gchar *uri) | 1541 | +/** |
1542 | + * v3270_set_host: | ||
1543 | + * | ||
1544 | + * @widget: V3270 widget. | ||
1545 | + * @uri: a valid tn3270 URL. | ||
1546 | + * | ||
1547 | + * Set the default URL for the tn3270e host. | ||
1548 | + * | ||
1549 | + * Returns: The lib3270 processed string as an internal constant. | ||
1550 | + * | ||
1551 | + * Since: 5.0 | ||
1552 | + **/ | ||
1553 | +const gchar * v3270_set_host(GtkWidget *widget, const gchar *uri) | ||
1480 | { | 1554 | { |
1481 | g_return_if_fail(GTK_IS_V3270(widget)); | 1555 | g_return_if_fail(GTK_IS_V3270(widget)); |
1482 | g_return_if_fail(uri != NULL); | 1556 | g_return_if_fail(uri != NULL); |
1483 | - lib3270_set_host(GTK_V3270(widget)->host,uri); | 1557 | + return lib3270_set_host(GTK_V3270(widget)->host,uri); |
1484 | } | 1558 | } |
1485 | 1559 | ||
1486 | const gchar * v3270_get_host(GtkWidget *widget) | 1560 | const gchar * v3270_get_host(GtkWidget *widget) |