Commit Graph

2950 Commits

Author SHA1 Message Date
Gerald Combs 4556498f33 Qt: Convert more dialogs to WiresharkDialog.
Make the Sequence, IO Graph, Statistics Tree, and VoIP Calls dialogs
subclasses of WiresharkDialog.

Remove "Stats Tree" from Statistics Tree dialog titles. Don't complain
if the user opens more than one instance of the dialog.

Use the applicationName property in WiresharkApplication instead of a
separate variable.

Add a preexisting item to the IO Graph bug list (hovering when the file
is closed clears the graph).

Change-Id: I8411a25305d00b16e0d4a82fa50a9bad5c85b239
Reviewed-on: https://code.wireshark.org/review/6125
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-30 03:34:03 +00:00
Pascal Quantin 0d414e5d7f Add ability to follow UDP stream by index
-z "follow,udp" tshark cli command now supports a stream index
It is now possible to select the UDP stream displayed in Qt GUI (like for TCP)

Change-Id: Ia367f36ea4f60db0fddb997a7e0903c09e172f2d
Reviewed-on: https://code.wireshark.org/review/6083
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
2014-12-29 22:17:47 +00:00
Alexis La Goutte ea080724ba Wireshark Dialog (Qt): Add Modelines info
Change-Id: I6689f5a95c6dc051d660198fd58ae96967f3468f
Reviewed-on: https://code.wireshark.org/review/6116
Reviewed-by: Michael Mann <mmann78@netscape.net>
2014-12-29 16:36:40 +00:00
Alexis La Goutte 90ba1668b3 capture_file.h (Qt): missing ]
Change-Id: Ibc512f03913d77a6c4f0cdbcf5141efbd94b22f0
Reviewed-on: https://code.wireshark.org/review/6115
Reviewed-by: Michael Mann <mmann78@netscape.net>
2014-12-29 16:35:36 +00:00
Gerald Combs e8ec11fb7e Qt: Add a WiresharkDialog convenience class.
Add WiresharkDialog, a common base class for dialogs centered around
capture files. Make it a parent of Capture File Properties, Traffic
Table, Conversations, and Endpoints.

Rename CaptureFile::read_only_ to file_closed_. Add methods to
WiresharkApplication for generating consistent window titles.

Change-Id: Idc771556d8192e60f85dddc08fc4757698dee257
Reviewed-on: https://code.wireshark.org/review/6097
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-29 01:42:13 +00:00
Michael Mann 71c02b20eb Create FT_FCWWN field type.
Also, convert the "string" hf_ entries that used tvb_fcwwn_to_str as a string to use proto_tree_add_item with FT_FCWWN type.

Change-Id: I4ca77870499fd8239584a70874998b5d194a7167
Reviewed-on: https://code.wireshark.org/review/6036
Petri-Dish: Michael Mann <mmann78@netscape.net>
Reviewed-by: Michael Mann <mmann78@netscape.net>
2014-12-28 20:05:29 +00:00
Pascal Quantin 8965e90a25 Qt Follow window: keep data representation when switching between streams
Change-Id: I1c7092d33d841e80ce110224f3bd617cb112be61
Reviewed-on: https://code.wireshark.org/review/6091
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-28 18:17:43 +00:00
Michael Mann 1d598bbff7 Replace ip6_to_str and ip6_guint8_to_str with address_to_str and tvb_ip_to_str.
Change-Id: I1d258923a7a63539ec8456d3e306bca5016a1e4b
Reviewed-on: https://code.wireshark.org/review/6060
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Reviewed-by: Michael Mann <mmann78@netscape.net>
2014-12-28 14:09:27 +00:00
Guy Harris 9fce4dd4cb If we can't open the GeoIP database, close and unlink the map file.
We can't write out the full map file, and we return an error, so just
get rid of the file.

Fixes Coverity CID 1256521.

Change-Id: Ieee078f760c035d65b2fce199ea472ba915be9c6
Reviewed-on: https://code.wireshark.org/review/6090
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2014-12-28 10:28:56 +00:00
Dario Lombardo 63ebe918d9 Removed duplicated #include lines
Change-Id: I9cafa3cd5c74121168777d8c656e7e94e89efd3c
Reviewed-on: https://code.wireshark.org/review/6065
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Reviewed-by: Martin Mathieson <martin.r.mathieson@googlemail.com>
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
2014-12-28 00:02:39 +00:00
Pascal Quantin eff91ed57f Fix building of color conversation filter
Right now eth filter (the last one tried) is always applied

Change-Id: Ibe5d3c30033bd2d385bd1e68b20388114673cb5c
Reviewed-on: https://code.wireshark.org/review/6064
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
2014-12-26 22:43:35 +00:00
Guy Harris c2c9a09880 Use getopt_long() for the first pass through the argument list.
That way:

	1) we don't have to worry about the system getopt() and our
	   getopt_long(), on platforms that have getopt() but not
	   getopt_long() (Solaris prior to Solaris 10, HP-UX, AIX), not
	   working well together;

	2) if necessary, we can handle long options in the first pass.

Switch to using getopt_long() for the *second* pass for the GTK+ version
of Wireshark.

Use the documented mechanism for resetting the argument parser for the
glibc version of getopt_long(); use the mostly-undocumented-but-at-least-
they-documented-optreset mechanism for the *BSD version.

(We should look into doing only one pass, saving away arguments that
can't fully be processed in the first pass for further processing after
initializing libwireshark.)

Change-Id: Ide5069f1c7c66a5d04acc712551eb201080ce02f
Reviewed-on: https://code.wireshark.org/review/6063
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2014-12-26 22:39:46 +00:00
Pascal Quantin 2c6d2bb1e5 UDP: fix 'Follow Stream' button from conversations tab
Add stream index to conversation table

Change-Id: Id63b2cc0000d89297c8638b9a89315096fc5458b
Reviewed-on: https://code.wireshark.org/review/6062
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
2014-12-26 22:37:33 +00:00
Michael Mann 3d3f97320b Replace ip_to_str with [ep_]address_to_str and tvb_ip_to_str.
Change-Id: I40d0c8253743183aecef252040b7dd6742ae5c71
Reviewed-on: https://code.wireshark.org/review/5934
Reviewed-by: Michael Mann <mmann78@netscape.net>
2014-12-26 21:17:10 +00:00
Alexis La Goutte 9c7c72d5f2 VoIP Calls: Missing break in switch (CID 1155515)
Change-Id: Ie62cd2901c791490fe6685f560815e09b921d03b
Reviewed-on: https://code.wireshark.org/review/6001
Reviewed-by: Anders Broman <a.broman58@gmail.com>
2014-12-25 21:11:22 +00:00
Guy Harris e08eba9b9e Only include <wsutil/os_version_info.h> if we need it.
Change-Id: Idee0e7205969ac2e7b33c4748a1463a0bfffe0a6
Reviewed-on: https://code.wireshark.org/review/6051
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2014-12-25 21:03:45 +00:00
Guy Harris 20503c7047 Check for getopt_long(), not getopt().
We support three types of platforms:

	1) UN*Xes that have both getopt() and getopt_long();

	2) UN*Xes that have getopt() but not getopt_long();

	3) Windows, which has neither.

Checking for getopt_long() lets us distinguish between 1) and 2) and
build getopt_long() for them.

Change-Id: Iaf0f142f9bebaa2eed2128d544ec9786711def45
Reviewed-on: https://code.wireshark.org/review/6045
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2014-12-25 01:11:10 +00:00
Alexis La Goutte bfa9ddfa6c Qt (pref.gui_layout_type): Missing break in switch (CID 1159202 & 1159203)
Change-Id: I28af99cff5db310ef10258e3054afa7337df1e60
Reviewed-on: https://code.wireshark.org/review/5996
Reviewed-by: Anders Broman <a.broman58@gmail.com>
2014-12-24 17:03:11 +00:00
Alexis La Goutte 4876016bda Qt (KeyPressEvent): Missing break in switch (CID 1159205, 1159206, 1159208, 1159209)
Change-Id: I40b7c7eefb269570e6a1c5c9ec310fa97840d42d
Reviewed-on: https://code.wireshark.org/review/5995
Reviewed-by: Anders Broman <a.broman58@gmail.com>
2014-12-24 17:02:05 +00:00
Stephen Fisher 2d8ec49ffa Move twelve show_version() functions from the varoius programs and
Wireshark UI files into a single one in wsutil.

Change-Id: I0a64f0cc8106bd681bd185289c36272c4c43baad
Reviewed-on: https://code.wireshark.org/review/6026
Reviewed-by: Stephen Fisher <sfisher@sdf.org>
2014-12-24 16:51:45 +00:00
Alexis La Goutte 91cc34343f Qt (emitAppSignal): Missing break in switch (CID 1159204)
Change-Id: Ia2ba40a4fc284dbf3da8e27edf336a4e27cdb4e3
Reviewed-on: https://code.wireshark.org/review/6000
Reviewed-by: Michael Mann <mmann78@netscape.net>
2014-12-23 13:55:50 +00:00
Gerald Combs 5cdad9fe42 Qt: Add methods to CaptureFile and WiresharkApplication.
Add isValid, fileTitle, and retapPackets methods to CaptureFile. Add
application name and title separator convenience methods to
WiresharkApplication.

Convert traffic tables, conversations, and endpoints to use CaptureFile
directly and to let the user know when the capture file is closed. Set
the file dialog titles while we're here.

Change-Id: I990392786d3833e1e0b3638aa2d34a5ada39fa13
Reviewed-on: https://code.wireshark.org/review/5957
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-22 18:12:31 +00:00
Alexis La Goutte 5248c0df21 Fix unknown command tag name [-Wdocumentation-unknown-command]
Change-Id: I6c2564a86e13d9321001856ba1f51681a9f20976
Reviewed-on: https://code.wireshark.org/review/5979
Reviewed-by: Evan Huus <eapache@gmail.com>
2014-12-22 15:24:28 +00:00
Gerald Combs 8076f29fdb Qt: Fix status bar signal.
Change-Id: Ie935269f6cbe9495b95bcc24b45198fbd284fb35
Reviewed-on: https://code.wireshark.org/review/5963
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-22 00:42:15 +00:00
Pascal Quantin 9407160e05 Do not use packet scoped memory in GUI
It will trigger an assertion

Change-Id: I2436c11b45e1505a94256a06ed3ad0c5480e034b
Reviewed-on: https://code.wireshark.org/review/5953
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
2014-12-21 20:47:48 +00:00
Pascal Quantin ccf0573fcd Qt: rename SummaryDialog class to CaptureFilePropertiesDialog
Change-Id: I79aa63621853ff15b8c568e1c7949fb8fa0caca2
Reviewed-on: https://code.wireshark.org/review/5929
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-21 18:52:46 +00:00
Gerald Combs bcaf1f4ca6 Qt: Better accordion frame layout.
Calling invalidate + activate on the parent layout has better results
than calling adjustSize on the parent widget.

Change-Id: I844bee49b868d988b0fc93a72687407adf232ef9
Reviewed-on: https://code.wireshark.org/review/5951
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-21 18:47:42 +00:00
Pascal Quantin da220672b2 Qt: keep "Copy to clipboard" button active when closing the capture_file_properties_dialog
As the Capture File Properties window content is kept once the capture is closed, allow to copy it

Change-Id: I11466e102fcf75a31aaa22225861ad8bf27f89a8
Reviewed-on: https://code.wireshark.org/review/5942
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
2014-12-21 09:48:49 +00:00
Gerald Combs 14cff7b6e2 Qt: Don't clear the capture file properties.
Don't clear the contents of the capture file properties dialog when the
capture closes. Retaining the contents lets users compare the properties
for multiple files.

Change-Id: I6bf684e7bd996f22032ec3d0adcddc343bb17992
Reviewed-on: https://code.wireshark.org/review/5937
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-21 04:52:12 +00:00
Gerald Combs 35571f850f Qt: Fix accordion frame height calculation.
Change-Id: I32d2ea2ff34544e285b52e4e35e035306c33d3aa
Reviewed-on: https://code.wireshark.org/review/5935
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-21 04:52:04 +00:00
Pascal Quantin 81798009b9 Qt: fix a crash when closing a file while capture file properties window is open
refresh_button_ and copy_comment_button_ are not used neither initialized, get rid of them
Also clear text areas and disable buttons

Change-Id: I418d712313041dcf4f15aceee01497f01ae74918
Reviewed-on: https://code.wireshark.org/review/5927
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-21 04:13:40 +00:00
Pascal Quantin 86d1b54235 Qt: disable Capture File Properties toolbar icon by default
Otherwise it can be opened by clikcing on the icon just after launching Wireshark
Also update tooltip to match the exact dialog name

Change-Id: I5ce5e0c24f3dfb44c2303c78114102c5c03ccc88
Reviewed-on: https://code.wireshark.org/review/5930
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-21 04:12:08 +00:00
Gerald Combs ac69a6d1fa Qt: Use an accordion frame in the welcome screen.
Place the recent files list in an accordion frame so that showing and
hiding is more visually smooth.

Change-Id: Ifdc534a33aa9f93949c9f919cfe0765fbfcde750
Reviewed-on: https://code.wireshark.org/review/5924
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-20 22:18:09 +00:00
Gerald Combs d11e94b9dc Remove debugging code.
Change-Id: If3a64a6914ae8ce2521c85766df6f733a13ca7e1
Reviewed-on: https://code.wireshark.org/review/5926
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-20 22:18:01 +00:00
Stig Bjørlykke b4e90bdc8e Fix filter test for multifield custom column
This adds support for "field||field" without spaces.

Change-Id: Ia738d6642d12a188d1629bbdd9701cc8f8bb7a68
Reviewed-on: https://code.wireshark.org/review/5922
Reviewed-by: Michal Labedzki <michal.labedzki@tieto.com>
Tested-by: Michal Labedzki <michal.labedzki@tieto.com>
2014-12-20 20:46:21 +00:00
Gerald Combs 8b24471e62 Qt: Revert back to an all-in-one main window.
Switch back to having everything on the main window similar to GTK+.
It's more cluttered but this way but you don't have to navigate the task
selector to get to the recent files and help links.

Retain the "Capture", "Open", and "Learn" imperative text. Move "Open"
to the top as suggested by Michal.

Change-Id: Iaf7d93f9caf686b5cbeb640e5e5f95ecb46f7f2d
Reviewed-on: https://code.wireshark.org/review/5896
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-20 19:49:41 +00:00
Michal Labedzki 7b2ae71235 Fix filter valid/invalid test for multifield custom type
Check for "or" or "||" (also ignore whitespaces)
and check both arguments of this operator to be
fieldname (character check), then check whole filter is valid
for dfilter compiler.

Change-Id: I412b5dc1fca16fcd2b640aa74af81167300fd11e
Reviewed-on: https://code.wireshark.org/review/5848
Petri-Dish: Michal Labedzki <michal.labedzki@tieto.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Tested-by: Michal Labedzki <michal.labedzki@tieto.com>
Reviewed-by: Michal Labedzki <michal.labedzki@tieto.com>
2014-12-20 17:59:25 +00:00
Gerald Combs 9ba9cd83a4 Qt: Add a CaptureFile class.
Wrap the capture_file struct in a QObject which translates cf_cb_* and
capture_cb_* events into signals. Move the global cfile to
capture_file.cpp.

Don't use a void pointer for the capture file struct.

Change-Id: Ic5d5efb4bb1db64aa0247245890e5669b1da723a
Reviewed-on: https://code.wireshark.org/review/5885
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-20 17:39:29 +00:00
Gerald Combs 2bb8255e29 Consolidate RTP stream structs.
Consolidate the three different RTP stream structs in ui/rtp_stream.h,
ui/gtk/rtp_player.c, and ui/voip_calls.c into one. Make the member names
a bit more consistent. Document what each GList contains. Use nstime_t
for timestamps since that's what we get from the frame data. Use g_new0
to initialize our structs.

Change-Id: I2b3f8f2051394a6a98a5c7bc49c117f07161d031
Reviewed-on: https://code.wireshark.org/review/5843
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
2014-12-20 16:49:05 +00:00
Guy Harris b445b3da44 Rename wsutil/floor.[ch] to wsutil/floorl.[ch].
That better indicates what they do - they don't supply floor(), as
that's a standard math.h feature dating back before C89, they supply
floorl().

Change-Id: Ib1278c51cdfc57680c28c51de87eafb2cb50c8eb
Reviewed-on: https://code.wireshark.org/review/5905
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2014-12-20 03:44:34 +00:00
Guy Harris b736896490 Handle floorl() the same way we handle other not-on-all-platforms functions.
Use AC_CHECK_FUNC() for it, define FLOORL_LO to floorl.lo if we *don't*
have it, add FLOORL_LO to the list of items conditionally built in
libwsutil, and include "wsutil/floor.h" only if HAVE_FLOORL is *not*
defined, as that means it's *not* supplied by the platform and thus
*not* declared in <math.h>.

Also, use the standard export stuff in wsutil/floor.h.

Change-Id: Ic24aa69f65f2d15450d8b84b0c2b0c58f38edebe
Reviewed-on: https://code.wireshark.org/review/5901
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2014-12-20 02:54:04 +00:00
Stephen Fisher 201a7e7d68 Change more variables from si_code to mtp3_si_code to avoid conflicts
with a #define in a NetBSD header file.

Change-Id: I2136db207cb4707571920b373708fcb63505131c
Reviewed-on: https://code.wireshark.org/review/5900
Reviewed-by: Stephen Fisher <sfisher@sdf.org>
2014-12-20 02:30:17 +00:00
Stephen Fisher 71fc2f8a7a Another missing change, to include floor.h
Change-Id: Ice962bb9d62ab99f225228bf1e78850947eea625
Reviewed-on: https://code.wireshark.org/review/5895
Reviewed-by: Stephen Fisher <sfisher@sdf.org>
2014-12-20 00:28:11 +00:00
Stephen Fisher 47dc4e77cc Revert "Provide a floorl() function (which is currently only able to call GCC's __builtin_floorl() function) for systems which don't provide one." because I left off the new wsutil/floor.[ch] files
This reverts commit e2586ec36d.

Change-Id: Ie38b7f32b2d21e3beba5173eec22ca12b7f5da91
Reviewed-on: https://code.wireshark.org/review/5891
Reviewed-by: Stephen Fisher <sfisher@sdf.org>
2014-12-19 23:12:09 +00:00
Stephen Fisher e2586ec36d Provide a floorl() function (which is currently only able to call GCC's
__builtin_floorl() function) for systems which don't provide one.

Change-Id: Ie0140ff195f0eae525c7bd70c7c3e23039fde569
Reviewed-on: https://code.wireshark.org/review/5889
Reviewed-by: Stephen Fisher <sfisher@sdf.org>
2014-12-19 22:56:18 +00:00
Michael Mann 962fa218ef Replace uses of proto_get_frame_protocols with proto_is_frame_protocol when only one protocol is desired.
Also use proto_get_frame_protocols in main_menubar.c instead of doing it "manually".

Change-Id: Ie7a365c538700f2cebdd1e3d253f2fd9b189f5cf
Reviewed-on: https://code.wireshark.org/review/5851
Reviewed-by: Michael Mann <mmann78@netscape.net>
2014-12-19 18:00:20 +00:00
Michael Mann 1f031808e1 Use new color_dissector_filters.[ch] to refactor (color) conversation generation in GTK menus.
Change-Id: I5868a40b71a989a3a1522cb091064bb0aaec6daf
Reviewed-on: https://code.wireshark.org/review/5828
Reviewed-by: Michael Mann <mmann78@netscape.net>
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
2014-12-19 07:59:28 +00:00
Jeff Morriss b000ada7fa Finish renaming si_code to mtp3_si_code.
I5e183b997768c87f275569343afa69ca542aba46 missed a spot.

Change-Id: I0970f7e50719e71efc824bbb07a6c2a69c66e991
Reviewed-on: https://code.wireshark.org/review/5845
Reviewed-by: Jeff Morriss <jeff.morriss.ws@gmail.com>
2014-12-19 02:32:09 +00:00
Michael Mann acbef26939 Remove main-menubar-ui.xml because it's not used.
Noticed it because it had some really old menu information in it.  Much of which is now programmatically done.

Change-Id: I0a24227df48c00310bc3223f72ba71c00b2c9fc7
Reviewed-on: https://code.wireshark.org/review/5829
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Jeff Morriss <jeff.morriss.ws@gmail.com>
2014-12-19 02:28:06 +00:00
Guy Harris 51522b3372 Handle "I can't map this for that file format" better.
For cases where record (meta)data is something that can't be written out
in a particular file format, return WTAP_ERR_UNWRITABLE_REC_DATA along
with an err_info string.

Report (and free) that err_info string in cases where
WTAP_ERR_UNWRITABLE_REC_DATA is returned.

Clean up some other error reporting cases, and flag with an XXX some
cases where we aren't reporting errors at all, while we're at it.

Change-Id: I91d02093af0d42c24ec4634c2c773b30f3d39ab3
Reviewed-on: https://code.wireshark.org/review/5823
Reviewed-by: Guy Harris <guy@alum.mit.edu>
2014-12-18 00:03:26 +00:00