tests: add regression tests for Follow TCP Stream
[metze/wireshark/wip.git] / ui / help_url.c
1 /* help_url.c
2  *
3  * Some content from gtk/help_dlg.c by Laurent Deniel <laurent.deniel@free.fr>
4  *
5  * Wireshark - Network traffic analyzer
6  * By Gerald Combs <gerald@wireshark.org>
7  * Copyright 2000 Gerald Combs
8  *
9  * SPDX-License-Identifier: GPL-2.0-or-later
10  */
11
12 #include "config.h"
13
14 #include <string.h>
15
16 #include <glib.h>
17
18 #include "help_url.h"
19 #include "wsutil/filesystem.h"
20
21 #ifdef HHC_DIR
22 #include <windows.h>
23 #include <htmlhelp.h>
24 #include <wsutil/unicode-utils.h>
25 #endif
26
27 const char *
28 topic_online_url(topic_action_e action)
29 {
30     switch(action) {
31     case(ONLINEPAGE_HOME):
32         return "https://www.wireshark.org";
33         break;
34     case(ONLINEPAGE_WIKI):
35         return "https://wiki.wireshark.org";
36         break;
37     case(ONLINEPAGE_DOWNLOAD):
38         return "https://www.wireshark.org/download.html";
39         break;
40     case(ONLINEPAGE_DOCS):
41         return "https://www.wireshark.org/docs/";
42         break;
43     case(ONLINEPAGE_USERGUIDE):
44         return "https://www.wireshark.org/docs/wsug_html_chunked/";
45         break;
46     case(ONLINEPAGE_FAQ):
47         return "http://www.wireshark.org/faq.html";
48         break;
49     case(ONLINEPAGE_ASK):
50         return "https://ask.wireshark.org";
51         break;
52     case(ONLINEPAGE_SAMPLE_FILES):
53         return "https://wiki.wireshark.org/SampleCaptures";
54         break;
55     case(ONLINEPAGE_CAPTURE_SETUP):
56         return "https://wiki.wireshark.org/CaptureSetup";
57         break;
58     case(ONLINEPAGE_NETWORK_MEDIA):
59         return "https://wiki.wireshark.org/CaptureSetup/NetworkMedia";
60         break;
61     case(ONLINEPAGE_SAMPLE_CAPTURES):
62         return "https://wiki.wireshark.org/SampleCaptures";
63         break;
64     case(ONLINEPAGE_SECURITY):
65         return "https://wiki.wireshark.org/Security";
66         break;
67     case(ONLINEPAGE_CHIMNEY):
68         return "https://wiki.wireshark.org/CaptureSetup/Offloading#chimney";
69         break;
70     default:
71         return NULL;
72     }
73 }
74
75 /*
76  * Open the help dialog and show a specific HTML help page.
77  */
78 gchar *
79 user_guide_url(const gchar *page) {
80     GString *url = g_string_new("");
81
82     /*
83      * Try to open local .chm file. This is not the most intuitive way to
84      * go about this but it fits in with the rest of the _url functions.
85      */
86 #ifdef HHC_DIR
87     HWND hw;
88
89     g_string_printf(url, "%s\\user-guide.chm::/wsug_chm/%s>Wireshark Help",
90         get_datafile_dir(), page);
91
92     hw = HtmlHelpW(NULL,
93         utf_8to16(url->str),
94         HH_DISPLAY_TOPIC, 0);
95
96     /* if the .chm file could be opened, stop here */
97     if(hw != NULL) {
98         g_string_free(url, TRUE /* free_segment */);
99         return NULL;
100     }
101 #endif /* HHC_DIR */
102
103 #ifdef DOC_DIR
104     if (g_file_test(DOC_DIR "/guides/wsug_html_chunked", G_FILE_TEST_IS_DIR)) {
105         /* try to open the HTML page from wireshark.org instead */
106         g_string_printf(url, "file://" DOC_DIR "/guides/wsug_html_chunked/%s", page);
107     } else {
108 #endif /* ifdef DOC_DIR */
109        /* try to open the HTML page from wireshark.org instead */
110         g_string_printf(url, "https://www.wireshark.org/docs/wsug_html_chunked/%s", page);
111 #ifdef DOC_DIR
112     }
113 #endif /* ifdef DOC_DIR */
114
115
116     return g_string_free(url, FALSE);
117 }
118
119 gchar *
120 topic_action_url(topic_action_e action)
121 {
122     gchar *url;
123
124     /* pages online at www.wireshark.org */
125     url = g_strdup(topic_online_url(action));
126     if(url != NULL) {
127         return url;
128     }
129
130     switch(action) {
131     /* local manual pages */
132     case(LOCALPAGE_MAN_WIRESHARK):
133         url = data_file_url("wireshark.html");
134         break;
135     case(LOCALPAGE_MAN_WIRESHARK_FILTER):
136         url = data_file_url("wireshark-filter.html");
137         break;
138     case(LOCALPAGE_MAN_CAPINFOS):
139         url = data_file_url("capinfos.html");
140         break;
141     case(LOCALPAGE_MAN_DUMPCAP):
142         url = data_file_url("dumpcap.html");
143         break;
144     case(LOCALPAGE_MAN_EDITCAP):
145         url = data_file_url("editcap.html");
146         break;
147     case(LOCALPAGE_MAN_MERGECAP):
148         url = data_file_url("mergecap.html");
149         break;
150     case(LOCALPAGE_MAN_RAWSHARK):
151         url = data_file_url("rawshark.html");
152         break;
153     case(LOCALPAGE_MAN_REORDERCAP):
154         url = data_file_url("reordercap.html");
155         break;
156     case(LOCALPAGE_MAN_TEXT2PCAP):
157         url = data_file_url("text2pcap.html");
158         break;
159     case(LOCALPAGE_MAN_TSHARK):
160         url = data_file_url("tshark.html");
161         break;
162
163     /* local help pages (User's Guide) */
164     case(HELP_CONTENT):
165         url = user_guide_url( "index.html");
166         break;
167     case(HELP_CAPTURE_OPTIONS_DIALOG):
168         url = user_guide_url("ChCapCaptureOptions.html");
169         break;
170     case(HELP_CAPTURE_FILTERS_DIALOG):
171         url = user_guide_url("ChWorkDefineFilterSection.html");
172         break;
173     case(HELP_DISPLAY_FILTERS_DIALOG):
174         url = user_guide_url("ChWorkDefineFilterSection.html");
175         break;
176     case(HELP_FILTER_EXPRESSION_DIALOG):
177         url = user_guide_url("ChWorkFilterAddExpressionSection.html");
178         break;
179     case(HELP_COLORING_RULES_DIALOG):
180         url = user_guide_url("ChCustColorizationSection.html");
181         break;
182     case(HELP_CONFIG_PROFILES_DIALOG):
183         url = user_guide_url("ChCustConfigProfilesSection.html");
184         break;
185     case (HELP_MANUAL_ADDR_RESOLVE_DIALOG):
186         url = user_guide_url("ChManualAddressResolveSection.html");
187         break;
188     case(HELP_PRINT_DIALOG):
189         url = user_guide_url("ChIOPrintSection.html");
190         break;
191     case(HELP_FIND_DIALOG):
192         url = user_guide_url("ChWorkFindPacketSection.html");
193         break;
194     case(HELP_FIREWALL_DIALOG):
195         url = user_guide_url("ChUseToolsMenuSection.html");
196         break;
197     case(HELP_GOTO_DIALOG):
198         url = user_guide_url("ChWorkGoToPacketSection.html");
199         break;
200     case(HELP_CAPTURE_INTERFACES_DIALOG):
201         url = user_guide_url("ChCapInterfaceSection.html");
202         break;
203     case(HELP_CAPTURE_INFO_DIALOG):
204         url = user_guide_url("ChCapRunningSection.html");
205         break;
206     case(HELP_CAPTURE_MANAGE_INTERFACES_DIALOG):
207         url = user_guide_url("ChCapManageInterfacesSection.html");
208         break;
209     case(HELP_ENABLED_PROTOCOLS_DIALOG):
210         url = user_guide_url("ChCustProtocolDissectionSection.html");
211         break;
212     case(HELP_ENABLED_HEURISTICS_DIALOG):
213         url = user_guide_url("ChCustProtocolDissectionSection.html");
214         break;
215     case(HELP_DECODE_AS_DIALOG):
216         url = user_guide_url("ChCustProtocolDissectionSection.html");
217         break;
218     case(HELP_DECODE_AS_SHOW_DIALOG):
219         url = user_guide_url("ChCustProtocolDissectionSection.html");
220         break;
221     case(HELP_FOLLOW_STREAM_DIALOG):
222         url = user_guide_url("ChAdvFollowStreamSection.html");
223         break;
224     case(HELP_SHOW_PACKET_BYTES_DIALOG):
225         url = user_guide_url("ChAdvShowPacketBytes.html");
226         break;
227     case(HELP_EXPERT_INFO_DIALOG):
228         url = user_guide_url("ChAdvExpert.html");
229         break;
230     case(HELP_EXTCAP_OPTIONS_DIALOG):
231         url = data_file_url("extcap.html");
232         break;
233     case(HELP_STATS_SUMMARY_DIALOG):
234         url = user_guide_url("ChStatSummary.html");
235         break;
236     case(HELP_STATS_PROTO_HIERARCHY_DIALOG):
237         url = user_guide_url("ChStatHierarchy.html");
238         break;
239     case(HELP_STATS_ENDPOINTS_DIALOG):
240         url = user_guide_url("ChStatEndpoints.html");
241         break;
242     case(HELP_STATS_CONVERSATIONS_DIALOG):
243         url = user_guide_url("ChStatConversations.html");
244         break;
245     case(HELP_STATS_IO_GRAPH_DIALOG):
246         url = user_guide_url("ChStatIOGraphs.html");
247         break;
248     case(HELP_STATS_COMPARE_FILES_DIALOG):
249         url = user_guide_url("ChStatCompareCaptureFiles.html");
250         break;
251     case(HELP_STATS_LTE_MAC_TRAFFIC_DIALOG):
252         url = user_guide_url("ChTelLTEMACTraffic.html");
253         break;
254     case(HELP_STATS_LTE_RLC_TRAFFIC_DIALOG):
255         url = user_guide_url("ChTelLTERLCTraffic.html");
256         break;
257     case(HELP_STATS_TCP_STREAM_GRAPHS_DIALOG):
258         url = user_guide_url("ChStatTCPStreamGraphs.html");
259         break;
260     case(HELP_STATS_WLAN_TRAFFIC_DIALOG):
261         url = user_guide_url("ChStatWLANTraffic.html");
262         break;
263     case(HELP_FILESET_DIALOG):
264         url = user_guide_url("ChIOFileSetSection.html");
265         break;
266     case(HELP_CAPTURE_INTERFACE_OPTIONS_DIALOG):
267         url = user_guide_url("ChCustPreferencesSection.html#ChCustInterfaceOptionsSection");
268         break;
269     case(HELP_CAPTURE_INTERFACES_DETAILS_DIALOG):
270         url = user_guide_url("ChCapInterfaceDetailsSection.html");
271         break;
272     case(HELP_PREFERENCES_DIALOG):
273         url = user_guide_url("ChCustPreferencesSection.html");
274         break;
275     case(HELP_EXPORT_FILE_DIALOG):
276     case(HELP_EXPORT_FILE_WIN32_DIALOG):
277         url = user_guide_url("ChIOExportSection.html");
278         break;
279     case(HELP_EXPORT_BYTES_DIALOG):
280     case(HELP_EXPORT_BYTES_WIN32_DIALOG):
281         url = user_guide_url("ChIOExportSection.html#ChIOExportSelectedDialog");
282         break;
283     case(HELP_EXPORT_OBJECT_LIST):
284         url = user_guide_url("ChIOExportSection.html#ChIOExportObjectsDialog");
285         break;
286     case(HELP_OPEN_DIALOG):
287     case(HELP_OPEN_WIN32_DIALOG):
288         url = user_guide_url("ChIOOpenSection.html");
289         break;
290     case(HELP_MERGE_DIALOG):
291     case(HELP_MERGE_WIN32_DIALOG):
292         url = user_guide_url("ChIOMergeSection.html");
293         break;
294     case(HELP_IMPORT_DIALOG):
295         url = user_guide_url("ChIOImportSection.html");
296         break;
297     case(HELP_SAVE_DIALOG):
298     case(HELP_SAVE_WIN32_DIALOG):
299         url = user_guide_url("ChIOSaveSection.html");
300         break;
301     case(HELP_TIME_SHIFT_DIALOG):
302         url = user_guide_url("ChWorkShiftTimePacketSection.html");
303         break;
304     case(HELP_FILTER_SAVE_DIALOG):
305         url = user_guide_url("ChWorkFilterSaveSection.html");
306         break;
307     case(HELP_TELEPHONY_VOIP_CALLS_DIALOG):
308         url = user_guide_url("ChTelVoipCalls.html");
309         break;
310     case(HELP_RTP_ANALYSIS_DIALOG):
311         url = user_guide_url("ChTelRTPAnalysis.html");
312         break;
313     case(HELP_NEW_PACKET_DIALOG):
314         url = user_guide_url("ChapterWork.html#ChWorkPacketSepView");
315         break;
316     case(HELP_IAX2_ANALYSIS_DIALOG):
317         url = user_guide_url("ChTelIAX2Analysis.html");
318         break;
319     case(HELP_TELEPHONY_RTP_PLAYER_DIALOG):
320         url = user_guide_url("ChTelRtpPlayer.html");
321         break;
322
323     case(TOPIC_ACTION_NONE):
324     default:
325         g_assert_not_reached();
326     }
327
328     return url;
329 }
330
331 /*
332  * Editor modelines
333  *
334  * Local Variables:
335  * c-basic-offset: 4
336  * tab-width: 8
337  * indent-tabs-mode: nil
338  * End:
339  *
340  * ex: set shiftwidth=4 tabstop=8 expandtab:
341  * :indentSize=4:tabSize=8:noTabs=true:
342  */