ViewVC logotype

Log of /main/reTurn/reTurnServer.cxx

Parent Directory Parent Directory | Revision Log Revision Log

Links to HEAD: (view) (download) (annotate)
Sticky Revision:

Revision 11221 - (view) (download) (annotate) - [select for diffs]
Modified Sat Aug 30 14:15:44 2014 UTC (5 years, 3 months ago) by dpocock
File length: 9504 byte(s)
Diff to previous 11159 , to selected 8383
reTurn: Logging: configuring Syslog facility

Revision 11159 - (view) (download) (annotate) - [select for diffs]
Modified Fri Apr 25 14:03:32 2014 UTC (5 years, 7 months ago) by sgodin
File length: 9471 byte(s)
Diff to previous 11078 , to selected 8383
-modified asio and boost include file ordering to avoid multiply defined symbol errors on linking
 -in preparation for upgrade of asio drop and support for latest boost 
 -include asio/ssh.hpp everywhere asio.hpp is included
 -include boost headers before others, to ensure we are not redefining stdint definitions in some includes
  and not others

Revision 11078 - (view) (download) (annotate) - [select for diffs]
Modified Tue Mar 25 13:26:54 2014 UTC (5 years, 8 months ago) by Dpocock
File length: 9425 byte(s)
Diff to previous 10775 , to selected 8383
rutil: ServerProcess: provide facility to check if process already running

Revision 10775 - (view) (download) (annotate) - [select for diffs]
Modified Sat Dec 21 20:42:49 2013 UTC (5 years, 11 months ago) by Dpocock
File length: 9083 byte(s)
Diff to previous 10627 , to selected 8383
reTurn: periodically check for updates to the user database file

Revision 10627 - (view) (download) (annotate) - [select for diffs]
Modified Tue Oct 8 10:58:51 2013 UTC (6 years, 1 month ago) by dpocock
File length: 8981 byte(s)
Diff to previous 10468 , to selected 8383
reTurn: only try to start TLS transport when port is non-zero

Revision 10468 - (view) (download) (annotate) - [select for diffs]
Modified Wed Sep 11 09:56:05 2013 UTC (6 years, 2 months ago) by Dpocock
File length: 8773 byte(s)
Diff to previous 10086 , to selected 8383
reTurn: listen on IPv6 as well as IPv4

Revision 10086 - (view) (download) (annotate) - [select for diffs]
Modified Wed Mar 27 21:33:05 2013 UTC (6 years, 8 months ago) by dpocock
File length: 8026 byte(s)
Diff to previous 9880 , to selected 8383
reTurn: add support for dropping privileges, necessary for starting as root to run on port 443

Revision 9880 - (view) (download) (annotate) - [select for diffs]
Modified Fri Sep 21 20:07:19 2012 UTC (7 years, 2 months ago) by dpocock
File length: 7686 byte(s)
Diff to previous 9858 , to selected 8383
reTurn: add csignal to ensure a clean compile on OpenWRT

Revision 9858 - (view) (download) (annotate) - [select for diffs]
Modified Tue Aug 7 17:05:37 2012 UTC (7 years, 4 months ago) by sgodin
File length: 7667 byte(s)
Diff to previous 9633 , to selected 8383
-fixed issue there a virtual function (printHelpText) was being called from the ConfigParse constructor
 = was causing crashes if the user specified --help on the command line
 - removed command line parsing from constructor and created a new parseConfig method - this ensures the class is
   fully constructed before calling the virtual fn
-removed debug log statement that could get very large on a busy system in Proxy.cxx
-cleaned up helpText output on windows so that full doesn't print when arg[0] is used in help text
-added exception handling for command line parsing in reTurnServer

Revision 9633 - (view) (download) (annotate) - [select for diffs]
Modified Wed May 2 19:27:38 2012 UTC (7 years, 7 months ago) by sgodin
File length: 7488 byte(s)
Diff to previous 9544 , to selected 8383
-merge work from branches/b-repro-enh-20120205

-up repro version number 0.9
-added new Settings page to repro web interface to show current command line / files settings in use
 - will also display some some low level stack info and congestion stats (if enabled)
-added new config setting StatisticsLogInterval to specify how often statistics are dumped to 
 the log files
-cleaned up the WebAdmin constructor to take a Proxy object
-added new KeyValueStore class for highly efficient generic storage
 - keys are simple integer indexes into a vector and must be allocated 
   before they are used
 - currently supports storage and retrieval of the following types:
   Data, bool, short, unsigned short, int, unsigned int, and UInt64
-Converted ConfigParse storage from std::multimap to HashMultiMap
-removed print in TcpConnection that could end up printing garbage at the end of 
 messages that are not null terminated
-added KeyValueStore to three strategic locations in repro, allowing custom Processors 
 (Monkeys, Lemurs and Baboons) to store state scoped as follows:
     -Global Proxy Scope - Proxy::getKeyValueStore
     -Request Scope - RequestContext::getKeyValueStore
     -Target Scope - Target::getKeyValueStore
 Before this storage can be used you must statically allocate a storage key.
 See mFromTrustedNodeKey use in the IsTrustedNode class for an example.
-major changes to how repro is started up, to allow easier additions of
 custom startup logic, such as adding custom Processors (Monkeys, Lemurs and 
 Baboons) to the default Processor chains
  - almost all logic that was in repro.cxx has been moved out to a new class
    (ReproRunner), and split into smaller virtual methods that can be overridden
  - see comments at the top of repro.cxx for an example of how to add custom
-added option to enable some basic P-Asserted-Identity header handling
 - After auth is successful 
   - if P-Perferred-Identity header is present remove it
   - if no P-Asserted-Identity header is present, then add one
 - Removal of P-Asserted-Identity if Privacy header is set to "id"
   Note: Since we have no better mechanism to determine if destination is 
         trusted or not we assume that all destinations outside our domain 
         are not-trusted and will remove the P-Asserted-Identity header
-modified how ;lr param on routes are processed - moved logic from StaticRoute 
 to ResponseContext - this slightly changes the behaviour
 - previous implementation used to stop the processing chain as soon
   as the first matching route with a ;lr is found, new implementation
   does not stop Target processing if a ;lr is present
 - Multiple targets can now have a ;lr on them and be processed
   properly.  The ;lr parameter is now examined in 
   ResponseContext::beginClientTransaction, and if present the RequestUri
   is not altered and a Route header is added instead
-fixed a duplicate removeContact call in OutboundTargetHandler (a merge conflict
-avoid unnecessary iteration through target list in StaticRoute when try to determine
 if auth is required
-added two new constructors to QValueTarget to make is easier to form targets from 
 a NameAddr or Uri only
-removed some unused code in ResponseContext:  addOutboundBatch and mOutboundMap
-renamed Target::targetPtrCompare to Target::priorityMetricCompare to be more descriptive
-implement proper q-value processing of contacts in a redirect response

-fix for a long standing issue in repro that started in rev6794, where
 repro can be over protective and issue 403 responses for legitimate 
 mid-dialog requests.  The issue occurs when a repro domain user forms
 a dialog with a user in another external domain.  Any mid-dialog
 requests coming from the external domain would get 403'd.  This 
 was due to the logic in the AmIResponsible monkey, and the fact that 
 such requests have the repro endpoints contact address in the 
 RequestUri (typically the endpoints IP address), so not belonging
 to repro's domain, and the From user is not being from repro's domain.

 The original code to only do these checks for out of dialog requests
 was reintroduced with the following comments:

         // only perform relay check for out-of-dialog requests
         // !bwc! Um, then all anyone has to do to get us to be their relay
         //       is throw in a spurious to-tag...
         //       This smells funny. I am commenting it out.
         // .slg. Putting code back in and clarifying the funny smell.....
         //       We only want to do this check for out of dialog requests, since 
         //       mid-dialog requests could be 403'd otherwise.  Consider
         //       an INVITE request from a repro domain user to a user in 
         //       another domain.  The resulting ACK/200, BYE or any other
         //       mid-dialog request coming from the remote domain, will contain
         //       the repro users contact address in the RequestUri and a 
         //       foreign domain in the from header.  We want to ensure these
         //       requests are not 403'd.  Byron's comment about an endpoint getting
         //       us to relay by placing a spurious to tag in the request still 
         //       stands. Perhaps we ought to be checking the To header domain in 
         //       this case - however that is also weak, since the To header is not
         //       used in routing and easily be set to a URI in our domain to trick
         //       repro into forwarding.  Note:  From header domain checking is
         //       stronger than To header domain checking, since if the domain is 
         //       ours, then it must pass Digest Authentication (at least for non 
         //       ACK and BYE requests).

-add ability for a repro admin to add manual / permanent registrations - such
 manually added registrations are persisted to the database, and loaded at startup
 - Manual registrations can be added on the Registration Web Page
-add display of registered contact's QValue on registrations web page
-added ability to specify a Path on new static registration feature
-cleanup some old hacks now that we have the ability to manually add registrations
  - ParallelForkStaticRoutes no longer combines StaticRoutes Targets and LocationServer
  - Static Routes are no longer added as QValueTargets, they are now added as simple Targets.
    So they are no longer susceptible to the various QValue Settings - ie. QValueMsBeforeCancel.
  - Added new ContinueProcessingAfterRoutesFound setting:
    By default (false) we will stop looking for more Targets if we have found
    matching routes.  Setting this value to true will allow the LocationServer Monkey
    to run after StaticRoutes have been found.  In this case the matching
    StaticRoutes become fallback targets, processed only after all location server 
    Targets fail.

-added new Helper method:  Tuple getClientPublicAddress(const SipMessage& request)
  - look at Via headers, and finds the first public IP address closest to the sending
-added loopback address checking to Tuple::isPrivateAddress
-modified ServerRegistration:
 - Ensure that ContactInstanceRecord::mReceivedFrom is always populated - not just 
   in outbound use cases - added a new flag to indicate when flow routing is required
 - Added a new mPublicAddress flag member to ContactInstanceRecord - this will assist
   with an upcoming feature to do geo proximity routing
-added new ContactInstanceRecord::mPublicAddress to regsync process
-removed a chatty log line in DialogSetId
-used Symbols::COMMA in a few spots it wasn't being used in
-removed unimplemented targetCount method on ResponseContext
-renamed Helper::isSenderBehindNAT to isClientBehindNAT for consistency
-ensure we only skip the Monkey chain in StaticRoute if we actual found routes
-added missing license block to ForkControlMessage
-adding new Baboon:  GeoProximityTargetSorter
 If enabled, then this baboon can post-process the target list.  
 This includes targets from the StaticRoute monkey and/or targets
 from the LocationServer monkey.  Requests that meet the filter 
 criteria will have their Target list, flatened (serialized) and
 ordered based on the proximity of the target to the client sending
 the request.  Proximity is determined by looking for a 
 x-repro-geolocation="<latitude>,<longitude>" parameter on the Contact
 header of a received request, or the Contact headers of Registration
 requests.  If this parameter is not found, then this processor will
 attempt to determine the public IP address closest to the client or
 target and use the MaxMind Geo IP library to lookup the geo location.
-requires floating point support for geo proximity calculations
-resip TCP transports can crash repro on uncaught exception - if garbage is received
 on the socket, and there is no Content-Length header, then SipMessage::Exception can
 throw, and it was not caught with the existing ParseException catch handler.  Changed
 to catch BaseException instead.
-removed unsafe logging statement in DumTimeout - if DUM and stack are in different threads, then
 crash could occur
-enable Inserter functionality for collections that store pointers
 to items.  Use InsertP instead of Inserter for such collections.
 For example:  
 std::vector<std::string*> v;
 ... populate vector ...
 std::cout << InserterP(v) << std::endl;
-statictize strings in Inserter/InserterP
-add InserterP test cases to rutil/test/testInserter.cxx
-cleaned up Processor and ProcessorChain classes
 - added mName property in anticipation of a future capability to define processor 
   chains in the configuration file
 - simplified operator<< for processors, to use Name
-modified some Inserter uses to use new InserterP function
-allow custom repro implementations to add themselves to the RegistrarHandler so that
 registration messages can be processed and reacted to
-added a singleResultQuery API to MySqlDb
-series of interfaces to make is easier to implement new Asynchronous Monkey's / Processors that utilize a common thread pool
-removed getTransactionId from ForkControlMessage - method exists on base class, so it's not needed
-removed getTransactionId and tid() from UserInfoMessage - getTransactionId method exists on base class, so they are not needed
-made Worker and abstract base class
-modified ConfigParser to throw a resip style exception when failing to open configuration file
-minor cleanups to ConfigParser configuration file parsing routine

-added new RequestFilter monkey
 - allows user to configure conditions under which an inbound request should be rejected or not
 - allows two regular expression conditions that can be applied to any SIP message header:
   this includes the request-line, standard SIP headers and custom SIP headers.  If a header
   that can appear multiple time is specified, then each instance of the header is checked.
 - When conditions are met, allows the action carried out to be defined:
   - Accept - accepts this request and stops further processing in Request Filter monkey 
   - Reject - rejects this request with the provided SIP status code and reason text
   - SQL query - only available when MySQL support is compiled in - runs an arbitrary stored
     procedure or query, using replacement strings from the 2 condition regular expressions
     - query must return an empty string or "0" to instruct repro to Accept the request, or a 
       string containing "<SIP Reject Status Code>[, <SIP Reject Reason>]" to Reject the request
     - using the repro configuration file the SQL Query can be configured to operate on a
       completely different my SQL instance/server than the repro configuration
   - Filters are defined in the HTTP web interface via new Add Filter, Edit Filter and Show
     Filters web pages.  There is an ability to test the condition regular expressions from 
     the web page as well.
   - other Monkey settings are configured in the repro configuration file or via command line:
     DisableRequestFilterProcessor, RequestFilterDefaultNoMatchBehavior, 
     RequestFilterDefaultDBErrorBehavior, RequestFilterMySQLServer (and other mySQL related settings) 
   - can be used to implement a User Blocking functionality - ie. calls and instant messages 
     from user X to user Y should always be blocked, because user X is in user Y's block list
   - introduced new FilterStore configuration database table to store the Filters configured
     on the web pages

-added AsyncProcessorDispatcher / thread pool to repro that be shared by all AsyncProcessors
 - currently only used by new RequestFilter monkey
-cleaned up some implementation in AbstractDb to remove some code duplication
-catch config file parse, and missing file errors (exceptions) at repro startup
  - stop webpage from being able to add two routes with the same Key
  - optimized data fetch for displaying routes on web page
-Repro Web Interface
 - added new Add Filter, Edit Filter and Show Filters pages
 - made use of HTML tables consistent across all pages
 - made table backgrounds white to improved appearance
 - added title to right hand side pane
 - cleaned up formatting on many pages
 - ordered methods in source to match ordering on web page 
 - added warning to Domains page, that repro must be restarted

-added version information to startup logs and to display on web interface
-added bottom footer on web interface with link to www.resiprocate.org
-added new RequestFilter files to all Visual Studio projects and linux Makefile
-upped repro version to 0.9

-fix a bug in repro web interface, where fragmented HTTP messages were not being handled correctly
-fixed possible assert if a transport error is seen after trying to send an ACK message

-added optional MessageSilo support to repro
 - stores IM's (ie. SIP MESSAGE requests) for offline users
 - replays messages to users when they register (ie. come back online)
 - records are persisted to a database table, so they survive shutdowns
 - configurable filters exist for DestUri, MimeType, MessageBody size

-moved CommandServer from repro to reprolib
-added restart command to reprocmd - allows restarting repro to apply configuration changes while leaving 
 the in memory registration database in tact
-propagate db insert/update failures to callers - web interface now shows errors if record fails to update in db
-remove unused AbstractDb API's: writeRoute and writeFilter
-added ability for tables to have non-unique keys (ie. duplicate records)
-modified WorkerThread to support work that does not require a response to be queued back to the stack
-added database transaction support to BerekelyDb and MySQL implementations
-reorganized repro runner startup ordering so that DUM TU is started before Proxy and added new 
 virtual createDatastore method - in order to facility new Silo Monkey startup that requires access to 
 the Registrar object
-make RequestFilter monkey options - use config flag
-allow a DateCategory to be created from time_t

-build fixes for linux, add --with-geoip option to autotools configure
-added --with-popt to configure so that test projects can be build easily with popt support
-added autodetection of epoll support on unix and automatic addition of HAVE_EPOLL define

-added ability for repro to report a 404 error when attempting to reach a user that does not exist
 - previously repro would always send a 480 response when attempting to reach an AOR that wasn't
-removed unused SipStack parameter to DigestAuthenticator monkey

-allow reprocmd to run defaulting to for server connection

-added secondary database support to BerkeleyDb - allows tables with a secondary index
 - my sql implementation of AVPs with two indexes was added as well
-message silo records can now be deleted by referencing a unique key (ie. timestamp+tid)
 - transaction support is no longer required
-optimized data copies when reading records from BerkeleyDb
-increase MySQL AVP table size for value field from 1024 to 4096
-implemented logic to periodically cleanup Silo records that have expired

Revision 9544 - (view) (download) (annotate) - [select for diffs]
Modified Mon Apr 16 12:14:26 2012 UTC (7 years, 7 months ago) by dpocock
File length: 7487 byte(s)
Diff to previous 9542 , to selected 8383
reTurnServer: create PID file

Revision 9542 - (view) (download) (annotate) - [select for diffs]
Modified Mon Apr 16 12:13:52 2012 UTC (7 years, 7 months ago) by dpocock
File length: 7449 byte(s)
Diff to previous 9362 , to selected 8383
reTurn: adapt to use rutil::ServerProcess for daemonization

Revision 9362 - (view) (download) (annotate) - [select for diffs]
Modified Tue Jan 31 09:37:56 2012 UTC (7 years, 10 months ago) by dpocock
File length: 7640 byte(s)
Diff to previous 9329 , to selected 8383
Add support for daemonizing on platforms supporting fork()

Revision 9329 - (view) (download) (annotate) - [select for diffs]
Modified Sun Jan 22 19:00:36 2012 UTC (7 years, 10 months ago) by dpocock
File length: 7092 byte(s)
Diff to previous 8529 , to selected 8383
reTurnServer: read config settings from reTurnServer.config instead of using hard coded values

Revision 8529 - (view) (download) (annotate) - [select for diffs]
Modified Sat Jul 25 17:40:10 2009 UTC (10 years, 4 months ago) by sgodin
File length: 8475 byte(s)
Diff to previous 8408 , to selected 8383
-pad the content of the SOFTWARE header so that we are on a 4 byte boundary for size 
  - this prevents STUN messages from reTurn showing up in Wireshark as malformed packets 
  - Note: Wireshark is assuming older RFC3489 message sizing rules
-fixed some typos in command line parameters help text

Revision 8408 - (view) (download) (annotate) - [select for diffs]
Modified Wed Jan 28 21:06:58 2009 UTC (10 years, 10 months ago) by sgodin
File length: 8475 byte(s)
Diff to previous 8383
-added server certificate hostname validation support for clients
-added reTurn config object for server
-updated sample certs in reTurn to use a certificate with SubjectAltName

Revision 8383 - (view) (download) (annotate) - [selected]
Modified Thu Jan 8 02:36:06 2009 UTC (10 years, 11 months ago) by sgodin
File length: 8372 byte(s)
Diff to previous 8367
-more updates to move reTurn towards draft-behave-turn-12
-modified channel number range to 0x4000-0x7fff
-handle channel bind errors in async client
-remove allocation if 437 to Refresh request in clients
-implemented CreatePremission method
-return error if Don't Fragment bit is set (at least until DF is implemented)
-ensure reservation tokens can only allocate reserved ports numbers
-removed bandwidth attribute from responses
-verify channel number in channel bind request is in valid range
-allow starting server with no command line parameters

Revision 8367 - (view) (download) (annotate) - [select for diffs]
Modified Tue Dec 16 18:10:49 2008 UTC (10 years, 11 months ago) by sgodin
File length: 7480 byte(s)
Diff to previous 8311 , to selected 8383
-update a bunch of license blocks from Vovida 2.0 to BSD-3 clause that were supposed to have been changed months ago

Revision 8311 - (view) (download) (annotate) - [select for diffs]
Modified Mon Nov 24 00:46:22 2008 UTC (11 years ago) by sgodin
File length: 7418 byte(s)
Diff to previous 8134 , to selected 8383
-final updates for RFC5389 support
-updated README.txt to reflect RFC5389 updates and TODO's
-allow command line option to configure independent port for STUN/TURN over TLS
-modified BindRequest handling on server to look for StunMagic cookie and add 
 XOR mapped address vs Mapped Address appropriately

Revision 8134 - (view) (download) (annotate) - [select for diffs]
Modified Mon Jul 21 22:24:23 2008 UTC (11 years, 4 months ago) by jmatthewsr
File length: 7352 byte(s)
Diff to previous 7754 , to selected 8383
compile error with leak checker

Revision 7754 - (view) (download) (annotate) - [select for diffs]
Modified Mon May 26 21:55:31 2008 UTC (11 years, 6 months ago) by sgodin
File length: 7303 byte(s)
Diff to previous 7510 , to selected 8383
-updated return from behave-turn-05 to behave-turn-07
  - Highlights...
  - removed 4-byte framing for all TURN messaging
  - Uses new Channel Bind mechanism
  - new allocation props header, and reservation token header
  - move requested ip address header
-synchronous reTurn client implementation used asio::socket::cancel which now
 requires ASIO_ENABLE_CANCELIO define on windows platforms in asio version 1.0.0
-updated reflow for reTurn changes

Revision 7510 - (view) (download) (annotate) - [select for diffs]
Modified Sat Dec 22 19:56:32 2007 UTC (11 years, 11 months ago) by sgodin
File length: 8142 byte(s)
Diff to previous 7501 , to selected 8383
-fix for linux shutdown issue

Revision 7501 - (view) (download) (annotate) - [select for diffs]
Modified Wed Dec 19 21:42:02 2007 UTC (11 years, 11 months ago) by sgodin
File length: 8120 byte(s)
Diff to previous 7476 , to selected 8383
-ServerRegistration.cxx - remove compiler warning
-BasicCall.cxx - fixed typo
-reTurn - use resip logging subsystem
-reTurn - code cleanup for converstion to/from StunAtrAddress and StunTuple
-OpenSSLInit - make sure locking function does not get called after de-initialization
 - this is possible on applications that use rutil with openSSL and openSSL from a different library

Revision 7476 - (view) (download) (annotate) - [select for diffs]
Modified Sun Dec 2 19:35:56 2007 UTC (12 years ago) by sgodin
File length: 8023 byte(s)
Diff to previous 7423 , to selected 8383
- added retransmit and request timeout timers to async sockets
- made Async Socket calls thread safe
- Added WIN32 memory leak detection to server and test client

Revision 7423 - (view) (download) (annotate) - [select for diffs]
Modified Fri Nov 23 01:13:27 2007 UTC (12 years ago) by sgodin
File length: 7938 byte(s)
Diff to previous 7418 , to selected 8383
-completed restructuring of TCP and TLS server - now working again
-added support for STUN TCP and STUN TLS server (on top of TURN TCP and TURN TLS)

Revision 7418 - (view) (download) (annotate) - [select for diffs]
Modified Wed Nov 21 22:28:22 2007 UTC (12 years ago) by sgodin
File length: 7370 byte(s)
Diff to previous 7366 , to selected 8383
-major restructuring in preparation for async client api
-optimized data copying
-Tcp and Tls servers currently disabled - still need some work to update to new structure
-fix in client handling of channel number

Revision 7366 - (view) (download) (annotate) - [select for diffs]
Modified Sun Oct 28 17:34:51 2007 UTC (12 years, 1 month ago) by sgodin
File length: 7100 byte(s)
Diff to previous 7365 , to selected 8383
-fixed eol-style

Revision 7365 - (view) (download) (annotate) - [select for diffs]
Modified Sun Oct 28 16:52:18 2007 UTC (12 years, 1 month ago) by sgodin
File length: 7135 byte(s)
Diff to previous 7348 , to selected 8383
-fixed TLS Server so that first TLS connection does not fail
-enhanced TestClient with RemotePeer socket
-fixed misc client side bugs
-cleanup RFC3489 back compat support so that StunMessage doesn't carry info
-fix for peer->client framed data

Revision 7348 - (view) (download) (annotate) - [select for diffs]
Modified Mon Oct 22 16:52:21 2007 UTC (12 years, 1 month ago) by sgodin
File length: 6573 byte(s)
Diff to previous 7322 , to selected 8383
- completed Server coding for behave-turn-05 channels (untested)
- client implementation still pending

Revision 7322 - (view) (download) (annotate) - [select for diffs]
Modified Sun Oct 14 21:00:24 2007 UTC (12 years, 1 month ago) by sgodin
File length: 5591 byte(s)
Diff to previous 7321 , to selected 8383
Modifications for linux build.

Revision 7321 - (view) (download) (annotate) - [select for diffs]
Added Sun Oct 14 18:18:46 2007 UTC (12 years, 1 month ago) by sgodin
File length: 4976 byte(s)
Diff to selected 8383
- initial checkin of reTurn project - Stun/Turn Server and Client Library
- see README.txt for more info and status

This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, enter a numeric revision.

  Diffs between and
  Type of Diff should be a

webmaster AT resiprocate DOT org
ViewVC Help
Powered by ViewVC 1.1.27