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