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) |