diff options
author | Tomas Kukosa <tomas.kukosa@siemens.com> | 2007-01-12 13:02:49 +0000 |
---|---|---|
committer | Tomas Kukosa <tomas.kukosa@siemens.com> | 2007-01-12 13:02:49 +0000 |
commit | 61b7428ae5ed6053fe202138c7a4cf56fff2410f (patch) | |
tree | 197d711eecd83982346c62db82f800540d6d32e7 /gtk/ssl-dlg.c | |
parent | 844abae29a741eb9e20987a9ec528eb4093b56e6 (diff) |
update ssl-dlg.c in accordance with changes in SSL dissector
svn path=/trunk/; revision=20408
Diffstat (limited to 'gtk/ssl-dlg.c')
-rw-r--r-- | gtk/ssl-dlg.c | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/gtk/ssl-dlg.c b/gtk/ssl-dlg.c index cf804cc6da..9688ce5829 100644 --- a/gtk/ssl-dlg.c +++ b/gtk/ssl-dlg.c @@ -126,7 +126,7 @@ static GList *follow_infos; typedef struct { gboolean is_server; - StringInfo* data; + StringInfo data; } SslDecryptedRecord; /* Add a "follow_info_t" structure to the list. */ @@ -148,15 +148,26 @@ ssl_queue_packet_data(void *tapdata, packet_info *pinfo, epan_dissect_t *edt _U_ { follow_info_t* follow_info = tapdata; SslDecryptedRecord* rec; + SslDataInfo* appl_data; + gint total_len; + guchar *p; int proto_ssl = (int) ssl; SslPacketInfo* pi = p_get_proto_data(pinfo->fd, proto_ssl); /* skip packet without decrypted data payload*/ - if (!pi || !pi->app_data.data) + if (!pi || !pi->appl_data) return 0; + + /* compute total length */ + total_len = 0; + appl_data = pi->appl_data; + do { + total_len += appl_data->plain_data.data_len; + appl_data = appl_data->next; + } while (appl_data); /* compute packet direction */ - rec = g_malloc(sizeof(SslDecryptedRecord)); + rec = g_malloc(sizeof(SslDecryptedRecord) + total_len); if (follow_info->client_port == 0) { follow_info->client_port = pinfo->srcport; @@ -170,10 +181,18 @@ ssl_queue_packet_data(void *tapdata, packet_info *pinfo, epan_dissect_t *edt _U_ rec->is_server = 1; /* update stream counter */ - follow_info->bytes_written[rec->is_server] += pi->app_data.data_len; + follow_info->bytes_written[rec->is_server] += total_len; /* extract decrypted data and queue it locally */ - rec->data = &pi->app_data; + rec->data.data = (guchar*)(rec + 1); + rec->data.data_len = total_len; + appl_data = pi->appl_data; + p = rec->data.data; + do { + memcpy(p, appl_data->plain_data.data, appl_data->plain_data.data_len); + p += appl_data->plain_data.data_len; + appl_data = appl_data->next; + } while (appl_data); follow_info->ssl_decrypted_data = g_list_append( follow_info->ssl_decrypted_data,rec); @@ -625,8 +644,8 @@ follow_read_stream(follow_info_t *follow_info, } if (!skip) { - size_t nchars = rec->data->data_len; - char* buffer = (char*) rec->data->data; + size_t nchars = rec->data.data_len; + char* buffer = (char*) rec->data.data; switch (follow_info->show_type) { |