/[resiprocate]/main/resip/stack/Tuple.cxx
ViewVC logotype

Log of /main/resip/stack/Tuple.cxx

Parent Directory Parent Directory | Revision Log Revision Log


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

Revision 11153 - (view) (download) (annotate) - [select for diffs]
Modified Wed Apr 23 17:25:02 2014 UTC (5 years, 9 months ago) by dpetrie
File length: 29436 byte(s)
Diff to previous 11003
added netns scope/context to Uri and Tuple


Revision 11003 - (view) (download) (annotate) - [select for diffs]
Modified Sun Feb 23 21:29:34 2014 UTC (5 years, 11 months ago) by sgodin
File length: 27098 byte(s)
Diff to previous 10975
-Tuple - removed unimplemented API from header
-Tuple - improved look of output stream operator and added transportKey to output (if set)

Revision 10975 - (view) (download) (annotate) - [select for diffs]
Modified Sun Feb 16 20:04:10 2014 UTC (5 years, 11 months ago) by sgodin
File length: 27012 byte(s)
Diff to previous 10710
-removed use of raw transport pointers in Tuple and SipMessage (finally!!)
 -required repro record route logic to be modified - no longer store transport specific
  record routes in the Transport class - the Proxy class now tracks these
 -removed SipMessage::getReceivedTransport and added isFromWire method that can be used in
  it's place in various locations


Revision 10710 - (view) (download) (annotate) - [select for diffs]
Modified Wed Dec 4 15:00:05 2013 UTC (6 years, 1 month ago) by dpocock
File length: 27132 byte(s)
Diff to previous 10296
resip/stack: Tuple: provide method for copying out sockaddr

Revision 10296 - (view) (download) (annotate) - [select for diffs]
Modified Fri Jul 19 09:55:25 2013 UTC (6 years, 6 months ago) by Dpocock
File length: 26764 byte(s)
Diff to previous 10101
resip/stack: Tuple: fix mask comparison for some platforms with 64 bit long

Revision 10101 - (view) (download) (annotate) - [select for diffs]
Modified Thu Apr 4 22:28:54 2013 UTC (6 years, 9 months ago) by dpocock
File length: 26792 byte(s)
Diff to previous 10094
resip/stack: Tuple: revert changes from b-webrtc merge

Revision 10094 - (view) (download) (annotate) - [select for diffs]
Modified Thu Apr 4 22:02:03 2013 UTC (6 years, 9 months ago) by dpocock
File length: 26916 byte(s)
Diff to previous 10089
Merge b-webrtc into main

Revision 10089 - (view) (download) (annotate) - [select for diffs]
Modified Sun Mar 31 16:44:12 2013 UTC (6 years, 9 months ago) by sgodin
File length: 26792 byte(s)
Diff to previous 9633
-don't assert in Tuple constructors that take printable addresses, since
 these addresses can come from the wire or from configuration
-removed some TABs in the Tuple source

Revision 9633 - (view) (download) (annotate) - [select for diffs]
Modified Wed May 2 19:27:38 2012 UTC (7 years, 8 months ago) by sgodin
File length: 25976 byte(s)
Diff to previous 9490
-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
    processors
-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
 victim)
-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
    Targets
  - 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
    client.
-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
-RouteStore 
  - 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
   registered
-removed unused SipStack parameter to DigestAuthenticator monkey

-allow reprocmd to run defaulting to 127.0.0.1:5081 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 9490 - (view) (download) (annotate) - [select for diffs]
Modified Sat Apr 7 10:36:00 2012 UTC (7 years, 9 months ago) by dpocock
File length: 25920 byte(s)
Diff to previous 9485
Correct use of ifdef for IPV6

Revision 9485 - (view) (download) (annotate) - [select for diffs]
Modified Sat Apr 7 00:34:03 2012 UTC (7 years, 9 months ago) by dpocock
File length: 25917 byte(s)
Diff to previous 9367
Switch over to autotools build system from dpocock-autotools branch

Revision 9367 - (view) (download) (annotate) - [select for diffs]
Modified Wed Feb 1 16:12:20 2012 UTC (7 years, 11 months ago) by sgodin
File length: 25931 byte(s)
Diff to previous 9060
-merge work from resip-b-TKLC-perf_work branch

Merge Notes:

Various optimizations of Data
=============================

Made Data smaller, without sacrificing functionality. Data is 20 (56 vs 36) 
bytes smaller on 64-bit libs, and 4 (36 vs 32) bytes smaller on 32-bit libs. 
This was accomplished by making mSize, mCapacity, and mShareEnum 4-bytes on 
64-bit platforms (mShareEnum could be one byte, but it turns out this imposes a 
detectable performance penalty), and by having mShareEnum do double-duty as a 
null-terminator for mPreBuffer (Borrow==0), instead of requiring an extra byte 
at the end of mPreBuffer.

Several very simple functions have been inlined.

Functionality enhancements to a couple of functions:

- Data::md5() has been changed to Data::md5(Data::EncodingType type=HEX); this 
allows the output of md5() to be encoded as hex or Base64, or not encoded at all 
(binary).

- Data::replace(const Data& match, const Data& target) has been updated to 
Data::replace(const Data& match, const Data& target, int max=INT_MAX); this 
allows the maximum number of replacements to be specified.

Lastly, a few specialized hashing and comparison functions have been added:

- Data::caseInsensitiveTokenHash(); this is a case-insensitive hash that assumes 
that the Data is an RFC 3261 token (eg; branch params). This character set has 
the property that no character is equal to any other character when bit 6 is 
masked out, except for the alphabetical characters. (For alphabetical 
characters, bit 6 specifies whether the character is upper/lower case) This 
means that we can mask out bit 6, and then use a case-sensitive hash algorithm 
on the resulting characters, without hurting the collision properties of the 
hash, and get a case-insensitive hash as a result. This hash function is based 
on the Hsieh hash.

- bool Data::caseInsensitiveTokenCompare(const Data& rhs); this is an equality 
comparison that assumes that both Datas are RFC 3261 tokens (eg; branch 
parameters). This function takes advantage of the same properties of the RFC 
3261 token character set as caseInsensitiveTokenHash(), by using a bitmask 
instead of a true lowercase() operation. This ends up being faster than 
strncasecmp().

- Data& schemeLowercase(); this is a variant of lowercase() that assumes the 
Data is an RFC 3261 scheme. This character set has the property that setting bit 
6 is a no-op, except for alphabetical characters (0-9, '+', '-', and '.' all 
already have bit 6 set). Setting bit 6 on a alphabetical character is equivalent 
to lower-casing the character. Note: There is no corresponding schemeUppercase() 
function, because clearing bit 6 will convert 0-9, '+', '-', and '.' into 
unprintable characters (well, '-' is turned into a CR, but you get the point).



Performance improvements to ParseBuffer
=======================================

- Most functions that returned a Pointer now return a much more lightweight
   CurrentPosition object.
- Allow some of the simpler functions to be inlined
- Integer parsing code is more efficient, and overflow detection is better


Performance enhancements to DnsUtil
===================================

- DnsUtil::inet_ntop(): For some reason, the stock system inet_ntop 
  is dreadfully inefficient on OS X. A dirt-simple hand-rolled 
  implementation was 5-6 times as fast. This is shocking. The Linux 
  implementation is plenty efficient, though, so we're using 
  preprocessor to activate the hand-rolled code.

- DnsUtil::isIpV4Address(): The implementation uses 
  sscanf(), which is pretty expensive. Hand-rolled some code that 
  is much faster.


Reduced the memory footprint associated with storing URIs
=========================================================
- Removed the AOR cacheing stuff from Uri; it was horrifically inefficient. Checking
  for staleness of the cache was nearly as expensive as regenerating the AOR from 
  scratch. Not to mention that the AOR cacheing stuff took up a whopping 148 bytes
  of space on 64-bit platforms (4 Datas, and an int).

- Reworked the host canonicalization cache to take up less space, and be faster.
  Previously, the canonicalized host was put in a separate Data. We now canonicalize
  in-place, and use a bool to denote whether canonicalization has been performed yet.
  This saves us 32 bytes.

- Changed Data Uri::mEmbeddedHeadersText to an auto_ptr<>, since in most cases Uris don't
  use it. Also use auto_ptr for mEmbeddedHeaders (was already a pointer, for consistency).


Change how branch parameters are encoded.
=========================================

Old format: z9hG4bK-d8754z-<branch>-<transportseq>-<clientData>-<sigcompCompartment>-d8754z-

New Format: z9hG4bK-524287-<transportseq>-<clientData>-<sigcompComprtment>-<branch>

This format encodes faster, parses faster (with _much_ simpler code), and takes up
less space on the wire. We may decide to tweak the new resip cookie; I chose 
something that we can use memcmp instead of strncasecmp with, but the token character
set has a bunch of characters that aren't alphanumeric we could use.

Also, some other small optimizations; avoid copies associated with calling
Data::base64encode()/base64decode() on empty Datas, and reorder the SIP cookie
comparisons to be more efficient.


State shedding modifications to TransactionState
================================================
In a number of cases, we were preserving state (in the form of SipMessages
and DnsResults) in cases where we did not really need them any more. For
example, once we have transmitted a response, there is no need
to preserve the full SipMessage for this response (the raw retransmit buffer
is sufficient). Also, INVITE requests do not need to be maintained once
a final response comes in (since there is no possibility that we'll need to
send a simulated 408 or 503 to the TU, nor will we need to construct a CANCEL
request using the INVITE, nor will we need to retransmit). Similarly, once we
have received a final response for a NIT transaction, we no longer need to
maintain the original request or the retransmit buffer. Lastly, if we are
using a reliable transport, we do not need to maintain retransmit buffers
(although we may need to maintain full original requests for simulated
responses and such).

This change has basically no impact on reliable NIT performance, but a huge
impact on non-reliable and INVITE performance. Prior to this change, either
NIT UDP or INVITE TCP testStack would exhaust main memory on my laptop (with
4GB of main memory), bringing progress to a complete halt on runs longer than
15 seconds or so. I did not bother trying INVITE UDP, but that works now too.


Reduction in buffer reallocations while encoding a SipMessage
=============================================================
TransportSelector now keeps a moving average of the outgoing message size,
which is used to preallocate the buffers into which SipMessages are encoded.

This ends up making a small difference in testStack when linked against google
malloc, but a larger difference when linked against OS X's (horrible) standard
malloc.


Multiple Threads in the Stack
=============================
Allow transaction processing, transport processing, and DNS processing to be 
broken off into separate threads.

- SipStack::run() causes the creation and run of three threads; a 
TransactionControllerThread, and TransportSelectorThread, and a DnsThread. You 
continue to use stuff like StackThread and EventStackThread to give cycles to 
the rest of the stack (mainly processing app timers and statistics logging); the 
SipStack is smart enough to unhook these three things from the normal event loop 
API when they have their own threads. In other words, to use the new 
multi-threaded mode, all you have to do is throw in a call to SipStack::run() 
before you fire up your normal SipStack processing, and a 
SipStack::shutdownAndJoinThreads() when you're done.

- In the Connection read/write code, process reads/writes until EAGAIN, or we 
run out of stuff to send. Gives a healthy performance boost on connection-based 
transports.

- In TransactionController, put transaction timers in their own fifo. This 
prevents timers from firing late when the state machine fifo gets congested. 
Also, process at most 16 TransactionMessages from the state machine fifo at a 
time, to prevent starving other parts of the system.

- Unhook the TransactionController's processing loop from that of the 
TransportSelector. This simplifies this API considerably, but required the 
addition of a new feature to Fifo. Fifo can now take an (optional) 
AsyncProcessHandler* that will be notified when the fifo goes from empty to 
non-empty. Actually pretty useful.

- Allow setPollGrp() to be called multiple times on the various classes that 
have this function. This allows the FdPollGrp to be re-set when the SipStack 
enters multithreaded mode.

- Added a "multithreadedstack" --thread-type option to testStack. Exercise this 
option in testStackStd.sh

- Added the ability to run any of the existing Transport objects in their own 
thread, by a combination of a new transport flag 
(RESIP_TRANSPORT_FLAG_OWNTHREAD), and a new TransportThread class. Added support 
for this mode to testStack using the --tf option. Also exercised this feature in 
testStackStd.sh.

- Installed SelectInterruptors at the TransportSelector, each Transport object, 
and the DnsStub (this last one required moving SelectInterruptor to rutil). This 
is critical to making multithreaded mode work in a performant manner, and 
imposes almost no performance penalty due to the way they are invoked.

- SipStack now creates its own SelectInterruptor if one is not supplied 
externally. This is because it is critical to be able to wake the 
TransactionController up when new work comes down from the TU, or from the 
transports.


New congestion-management framework
===================================
Notable features include:
* Allow testStack, tfm/repro/sanityTests, and repro to be run with a congestion 
   manager with the --use-congestion-manager flag.

* Efficient wait-time estimation in AbstractFifo; keeps track of how rapidly
   messages are consumed, allowing good estimates of how long a new message will
   take to be serviced. More efficient than the time-depth logic in 
   TimeLimitFifo, and a better predictor too.

* The ability to shed load at the transport level when the TransactionController
   is congested, in a very efficient manner, using new functionality in Helper
   and SipMessage (Helper::makeRawResponse() and 
   SipMessage::encodeSingleHeader())

* The ability to shed load coming from the TU when the TransactionController is 
   congested. This is crucial when congestion is being caused by a TU trying to 
   do too much.

* Changed the way load-shedding is handled for TransactionUsers to use the new
   API

* A flexible congestion-management API, allowing load-shedding decisions to be
   made in an arbitrary fashion.

* A generalized CongestionManager implementation that is powerful enough to be
   useful.

* The TransactionController will now defer retransmissions of requests if 
   sufficiently congested (ie; the response is probably stuck in mStateMacFifo)

* The TransactionController now determines its hostname with a single call to 
   DnsUtil::getLocalHostName() on construction, for use in 503s. Previously, it 
   would make this call every time a 503 was sent; this call blocks sometimes!

* Don't call DnsResult::blacklistLast() on a Retry-After: 0

* Several fixes the the processing loop in testStack that were causing 
   starvation of one type of work or another when congestion occurred.


Other Misc Enhancements
=======================
-Small efficiency improvement in Random::getCryptoRandom(int)
 Random::getCryptoRandom(unsigned int len) was implemented by calling 
 Random::getCryptoRandom() repeatedly, and collecting the return values 
 in a buffer. In the openssl case, we now use a single call to RAND_bytes().
-Use a priority_queue instead of a multiset for storing timers.
-Slight refactoring of Timer so that transaction timers and payload timers (ie; 
 timers that carry a Message*) are separate classes. Transaction timers no longer 
 have an unused Message* member, and payload timers no longer have the unused 
 transaction-id, Timer::Type, and duration. This saves a _lot_ of memory for apps 
 that use lots of app timers with long lifetimes.
-Less wasteful population of Call-IDs: 
 When generating Call-IDs, Helper was computing an md5 hash of the hostname and 
 some salt, hex-encoding it, and then Base64 encoding the hex data. We now Base64 
 encode the md5 hash directly. This is less computationally expensive, requires 
 less memory because the resulting string is half the size, and requires fewer 
 bytes on the wire.
-Make TransactionMap case-insensitive; Data::caseInsensitiveTokenHash() is fast
 enough that performance actually increases a little.
-std::bitset-based parsing in a number of places.
-Don't check whether the encoding tables are initted for every single
 character; check once before the encode operation begins. Also, checking
 the value of a static bool to determine whether an init has been carried
 out is pointless; that bool might not be initted yet, and it could have
 any value. The static init code now copes with both accesses to the encoding
 tables during static initialization, and from multiple threads during runtime.
-Don't bother generating a transaction identifier unless the parse fails
 to extract one.
-Some refactoring of the FdPollGrp stuff. Now is compatible with cares, using
 a bit of a hack. Also compatible with being driven with the old buildFdSet()/
 select()/process(FdSet&) call sequence, although this is now deprecated.
 Fixing these compatibility problems allowed us to switch over to using FdPollGrp
 in all cases, instead of having dual mode everywhere.
-Buffer classes for Fifo to reduce lock contention. Using them in a few places, will
 use them in more once we phase out TimeLimitFifo with the new congestion management
 code.
-Use the --ignore-case option for generation of ParameterHash.cxx, instead of the
 nasty sed rewriting we are using now. Should also be slightly faster, since gperf
 handles case-insensitive hashing more efficiently than our hack was.
-Adding a local memory pool to SipMessage, to cut down (dramatically) on
 heap allocation overhead. Some minor refactoring to free up wasted space
 in SipMessage as well (makes more room for the pool). Changing the way
 the start-line is stored to no longer use a full-blown ParserContainer+
 HeaderFieldValueList. Lots of opportunistic doxygen merging.
 Up to 20K NIT transactions per second on my machine, roughly a doubling
 in performance.


Bug Fixes
=========
-Use getaddrinfo() instead of the non-threadsafe gethostbyname().
-Remove unused (and non-threadsafe) Timer::mTimerCount/Timer::mId.
 Previously, all timers were assigned a "unique" (not really, more on that in a 
 moment) integer identifier. There is no place in the resip codebase that 
 actually uses this identifier in any way. For transaction timers, this 
 identifier is in principle unnecessary, since there is more than sufficient 
 identifier information present already (the transaction id and timer type). When 
 passing a Message* into the timer queue, a unique identifier already exists; the 
 Message* itself (if potential use of this Message* bugs you, you can always turn 
 it into a handle by applying some sort of transformation to it). This identifier 
 is unnecessary in every case I can think of. In addition, the values are 
 assigned simply by incrementing a global variable (Timer::mTimerCount), with no 
 threadsafety measures whatsoever, so it is not even guaranteed to be unique. 
 Because of all this, it has been removed. As a bonus, this saves some memory; 8 
 bytes per timer on 64-bit platforms, which adds up to around 3MB when testStack 
 steady state has close to 400000 timers in the timer queues at any given point. 
 This could be an even larger amount for TUs that schedule lots of long-lifetime 
 timers (Timer C, for instance).
-Get rid of a wasteful double-encode, in Message.cxx
-minor windows build fixes to avoid file in use errors when building dum test projects
-fix testDigestAuthentiation for recent lowercase nonce change
-fixed a nasty bug in NameAddr - where unknown parameters uri parameters on a 
 NameAddr/Uri with no angle brackets are treated as NameAddr parameters.  When this is
 done, the memory for these parameters was only a temporary Data object.
-fix bug in Data.  If Data is wrapping memory allocated externally (ie. Share mode = BORROW)
 and you start appending to it.  It is possible that the append method will write a NULL
 character off the end of the buffer.  Changed the resize condition to make the buffer
 larger 1 character sooner, to accommodate for this.

Revision 9060 - (view) (download) (annotate) - [select for diffs]
Modified Sun Mar 13 21:23:43 2011 UTC (8 years, 10 months ago) by bcampen
File length: 25751 byte(s)
Diff to previous 9059
Disable this stuff if IPV6 is not enabled.


Revision 9059 - (view) (download) (annotate) - [select for diffs]
Modified Sun Mar 13 19:33:02 2011 UTC (8 years, 10 months ago) by sgodin
File length: 25703 byte(s)
Diff to previous 9054
-add method to Tuple to test if an address is private or not: RFC1819 for v4 and RFC4193 for v6

Revision 9054 - (view) (download) (annotate) - [select for diffs]
Modified Wed Mar 9 22:11:23 2011 UTC (8 years, 10 months ago) by sgodin
File length: 24693 byte(s)
Diff to previous 9005
-use an HMAC code in FlowTokens - we can now verify the following about a flowToken 
  - it hasn't been maliciously modified
  - it is not from a previous restart of repro
  - it was generated from this repro instance
-renamed Tuple::makeTuple to Tuple::makeTupleFromBinaryToken


Revision 9005 - (view) (download) (annotate) - [select for diffs]
Modified Sun Feb 6 23:09:23 2011 UTC (8 years, 11 months ago) by sgodin
File length: 23424 byte(s)
Diff to previous 8976
-repro fix - don't added Supported: Path header if already present
-repro fix - look for outbound parameter in correct location (p_ob) 
  - it is a URI parameter, not a NameAddr parameter 
  - was causing incorrect 439 "first hop doesn't support outbound" errors
-Dum Keepalive Manager - improvements for TCP/TLS
  - We now track unique Network Associations per transport transport type, transport family, 
    target ip addr, target port, and source/transport flow key
    This means that if we have two different TCP connections to the same destination, 
    each originating from a different NIC, then we will send keepalives on each separately.
    For UDP, this is not currently the case, when the transport is bound to any interface
    (ie. 0.0.0.0), as the flow key will be same regardless of the source interface used to
    send the UDP message - fixing this for UDP remains an outstanding item.
-modified stack to return a 430 to the TU if connection is not found and onlyUseExistingConnection 
 is true

Revision 8976 - (view) (download) (annotate) - [select for diffs]
Modified Wed Jan 19 15:24:53 2011 UTC (9 years ago) by sgodin
File length: 23211 byte(s)
Diff to previous 8871
-cleaned up code to convert transport type enum from/to Data (string)
 -Data to type is now always case insensitive
 -consolidated duplicate code in TransportType and Tuple to use a newly cleaned up implementation in TransportType
-modified population of the transport parameter (p_transport) to be lower case, instead of upper, to improve
 interoperability with vendors that have not correctly implemented case insensitivity for this parameter (RFC 3261
 illustrates the transport parameter as lower case, so this is likely what most implementations have chosen).
-fixed a bug in ServerRegistration where we are not doing a case insensitive check of the transport parameter




Revision 8871 - (view) (download) (annotate) - [select for diffs]
Modified Sat Nov 27 15:37:49 2010 UTC (9 years, 2 months ago) by sgodin
File length: 23476 byte(s)
Diff to previous 8845
-fixed potential multi-threading issues with static member variable initialization
-expose resip local logger id to applications


Revision 8845 - (view) (download) (annotate) - [select for diffs]
Modified Thu Nov 4 16:43:34 2010 UTC (9 years, 2 months ago) by sgodin
File length: 23482 byte(s)
Diff to previous 8303
-remove compiler warnings when building 64-bit

Revision 8303 - (view) (download) (annotate) - [select for diffs]
Modified Wed Nov 19 20:24:47 2008 UTC (11 years, 2 months ago) by adam
File length: 23464 byte(s)
Diff to previous 8161
Cygwin changes from Francis Joanis


Revision 8161 - (view) (download) (annotate) - [select for diffs]
Modified Fri Jul 25 20:54:42 2008 UTC (11 years, 6 months ago) by jmatthewsr
File length: 23441 byte(s)
Diff to previous 7495
Stream performance enhancements for encoding objects.  New encoding code should use 'EncodeStream','resipCerr' and 'resipCout' for encoding any resip objects.  Merge from b-jmatthewsr-streamperf2 -r 8137:8160.  

Revision 7495 - (view) (download) (annotate) - [select for diffs]
Modified Mon Dec 17 22:17:46 2007 UTC (12 years, 1 month ago) by sgodin
File length: 23441 byte(s)
Diff to previous 7490
- updates to VS.NET 2003 and VS.NET 2005 project files
- replace bzero with memset for portability (thanks David Suh)

Revision 7490 - (view) (download) (annotate) - [select for diffs]
Modified Fri Dec 7 22:06:40 2007 UTC (12 years, 1 month ago) by bcampen
File length: 23437 byte(s)
Diff to previous 7463
BSD compile fix.


Revision 7463 - (view) (download) (annotate) - [select for diffs]
Modified Tue Nov 27 23:16:08 2007 UTC (12 years, 2 months ago) by bcampen
File length: 23350 byte(s)
Diff to previous 6896
Merge work from b-Outbound (proxy/registrar outbound support). Includes Path
support. No client support for either of these.


Revision 6896 - (view) (download) (annotate) - [select for diffs]
Modified Thu Dec 21 09:19:05 2006 UTC (13 years, 1 month ago) by vann
File length: 20329 byte(s)
Diff to previous 6541
Fixed V6 address in Via header: lower order bits got chopped off during assignment.

Revision 6541 - (view) (download) (annotate) - [select for diffs]
Modified Mon Aug 28 23:25:16 2006 UTC (13 years, 5 months ago) by derek
File length: 20269 byte(s)
Diff to previous 6437
don't include winsock2 when uncessarily and use LEAN_AND_MEAN for windows.h
Windows is a mess wrt to winsopck vs wincock2...the end result is that Socket.hxx needs to be inlcuded beofre compat.hxx.  Since Socket includes comapt, don't include compat.hxx in the same file as socket.hxx

Revision 6437 - (view) (download) (annotate) - [select for diffs]
Modified Fri Jul 28 17:47:54 2006 UTC (13 years, 6 months ago) by sgodin
File length: 20268 byte(s)
Diff to previous 6432
fix for WIN32

Revision 6432 - (view) (download) (annotate) - [select for diffs]
Modified Thu Jul 27 19:10:05 2006 UTC (13 years, 6 months ago) by bcampen
File length: 20245 byte(s)
Diff to previous 6430
Got Tuple::isLoopback() working for V6.

Revision 6430 - (view) (download) (annotate) - [select for diffs]
Modified Thu Jul 27 17:22:33 2006 UTC (13 years, 6 months ago) by bcampen
File length: 19799 byte(s)
Diff to previous 6411
Made connection ids globally unique, and not just unique to a particular transport. Made ConnectionManager::findConnection more thorough. Cleaned up TransportSelector, made it work with the modifications made to ConnectionManager. Improved handling of Tls and Dtls transports in TransportSelector. Made TransportSelector leverage connection ids more effectively.

Revision 6411 - (view) (download) (annotate) - [select for diffs]
Modified Fri Jul 21 22:18:21 2006 UTC (13 years, 6 months ago) by sgodin
File length: 19390 byte(s)
Diff to previous 6162
- fix for Tuple IPV6 hash on linux platforms

Revision 6162 - (view) (download) (annotate) - [select for diffs]
Modified Wed Apr 19 02:26:15 2006 UTC (13 years, 9 months ago) by rohan
File length: 19318 byte(s)
Diff to previous 6130
fix Tuple.cxx IPv6 mask comparison code to work under Mac OS X

Revision 6130 - (view) (download) (annotate) - [select for diffs]
Modified Mon Apr 10 15:28:39 2006 UTC (13 years, 9 months ago) by bcampen
File length: 19080 byte(s)
Diff to previous 6122
Compile fix for OS/X (made a previous fix a little more effective)

Revision 6122 - (view) (download) (annotate) - [select for diffs]
Modified Mon Apr 3 22:48:43 2006 UTC (13 years, 9 months ago) by derek
File length: 19084 byte(s)
Diff to previous 6108
re-ordered TransportType enum so the transport preference order is TLS->TCP->UDP when NAPTR is not present

Revision 6108 - (view) (download) (annotate) - [select for diffs]
Modified Tue Mar 28 00:43:26 2006 UTC (13 years, 10 months ago) by cbond
File length: 19084 byte(s)
Diff to previous 6059
fix Tuple for SunOS with USE_IPV6


Revision 6059 - (view) (download) (annotate) - [select for diffs]
Modified Thu Mar 9 01:02:52 2006 UTC (13 years, 10 months ago) by troll
File length: 18834 byte(s)
Diff to previous 6039
s6_addr16 definition for compatibility with OS X 10.2.8 SDK

Revision 6039 - (view) (download) (annotate) - [select for diffs]
Modified Wed Feb 22 04:08:34 2006 UTC (13 years, 11 months ago) by derek
File length: 18737 byte(s)
Diff to previous 6034
compiles on linux w/ IPV6 enabled

Revision 6034 - (view) (download) (annotate) - [select for diffs]
Modified Tue Feb 21 02:08:16 2006 UTC (13 years, 11 months ago) by jozsef
File length: 18524 byte(s)
Diff to previous 6033
Fix compile problem on Linux


Revision 6033 - (view) (download) (annotate) - [select for diffs]
Modified Mon Feb 20 20:28:46 2006 UTC (13 years, 11 months ago) by sgodin
File length: 18534 byte(s)
Diff to previous 5948
- fixed Acl's so that mask is now used in check
- fixed Acl's so that registrations are not challenged for trusted nodes
- TODO - fix non-thread safe access of transport in AclStore
- Added some more virtual methods to ServerAuthManager to make customization via an class override easier
- added ReproVersion to VS.NET project file
- fixed windows installer products names, etc.

Revision 5948 - (view) (download) (annotate) - [select for diffs]
Modified Fri Feb 17 15:30:16 2006 UTC (13 years, 11 months ago) by dworley
File length: 16541 byte(s)
Diff to previous 5929
Setting more svn: properties, and adding EOLs to the ends of files
that need it.


Revision 5929 - (view) (download) (annotate) - [select for diffs]
Modified Thu Feb 16 22:36:43 2006 UTC (13 years, 11 months ago) by dworley
File length: 16541 byte(s)
Diff to previous 5609
Start cleaning up svn:eol-style and EOLs in files.
Note that text and program files that can be used on both Un*x and Windows
should have svn:eol-style=native so they check out correctly on both
platforms.


Revision 5609 - (view) (download) (annotate) - [select for diffs]
Modified Mon Nov 7 18:52:37 2005 UTC (14 years, 2 months ago) by sgodin
File length: 16541 byte(s)
Diff to previous 5391
- cleanup messiness of HashMap stuff - introduced 2 new macros

Revision 5391 - (view) (download) (annotate) - [select for diffs]
Modified Tue Sep 13 04:19:52 2005 UTC (14 years, 4 months ago) by jason
File length: 17251 byte(s)
Diff to previous 5373
add tlsDomain into Tuple::operator<<



Revision 5373 - (view) (download) (annotate) - [select for diffs]
Modified Tue Sep 6 21:27:43 2005 UTC (14 years, 4 months ago) by derek
File length: 17130 byte(s)
Diff to previous 5372
reverted last change

Revision 5372 - (view) (download) (annotate) - [select for diffs]
Modified Tue Sep 6 20:44:37 2005 UTC (14 years, 4 months ago) by daniel
File length: 17130 byte(s)
Diff to previous 5369
compiles on windows.

Revision 5369 - (view) (download) (annotate) - [select for diffs]
Modified Tue Sep 6 18:34:23 2005 UTC (14 years, 4 months ago) by derek
File length: 17130 byte(s)
Diff to previous 5363
tuple vs DnsUtil inet_ntop fixes

Revision 5363 - (view) (download) (annotate) - [select for diffs]
Modified Fri Sep 2 22:27:00 2005 UTC (14 years, 4 months ago) by jason
File length: 17126 byte(s)
Copied from: main/rutil/Tuple.cxx revision 5354
Diff to previous 5295
sort out inter-dependencies between rutil and resip/stack





Revision 5295 - (view) (download) (annotate) - [select for diffs]
Modified Mon Aug 22 00:30:05 2005 UTC (14 years, 5 months ago) by jason
Original Path: main/rutil/Tuple.cxx
File length: 16756 byte(s)
Copied from: branches/b-directory-reorg/rutil/Tuple.cxx revision 5294
Diff to previous 5283
merged 5270:HEAD from b-directory-reorg

Revision 5283 - (view) (download) (annotate) - [select for diffs]
Modified Fri Aug 19 01:27:14 2005 UTC (14 years, 5 months ago) by derek
Original Path: branches/b-directory-reorg/rutil/Tuple.cxx
File length: 16756 byte(s)
Diff to previous 5276
finished resip/sip -> resip/stack rename

Revision 5276 - (view) (download) (annotate) - [select for diffs]
Modified Fri Aug 19 00:23:17 2005 UTC (14 years, 5 months ago) by jason
Original Path: branches/b-directory-reorg/rutil/Tuple.cxx
File length: 16750 byte(s)
Diff to previous 5275
compiles now

Revision 5275 - (view) (download) (annotate) - [select for diffs]
Modified Thu Aug 18 23:56:48 2005 UTC (14 years, 5 months ago) by jason
Original Path: branches/b-directory-reorg/rutil/Tuple.cxx
File length: 16810 byte(s)
Diff to previous 5274
initial reorg - more to come

Revision 5274 - (view) (download) (annotate) - [select for diffs]
Modified Thu Aug 18 23:53:59 2005 UTC (14 years, 5 months ago) by jason
Original Path: branches/b-directory-reorg/resip/sip/os/Tuple.cxx
File length: 16810 byte(s)
Diff to previous 5272
initial reorg - more to come

Revision 5272 - (view) (download) (annotate) - [select for diffs]
Modified Thu Aug 18 23:49:50 2005 UTC (14 years, 5 months ago) by jason
Original Path: branches/b-directory-reorg/resip/resiprocate/os/Tuple.cxx
File length: 16810 byte(s)
Diff to previous 5271
initial reorg - more to come

Revision 5271 - (view) (download) (annotate) - [select for diffs]
Modified Thu Aug 18 23:43:07 2005 UTC (14 years, 5 months ago) by jason
Original Path: branches/b-directory-reorg/sip/resiprocate/os/Tuple.cxx
File length: 16810 byte(s)
Diff to previous 4833
new directory reorg proposal

Revision 4833 - (view) (download) (annotate) - [select for diffs]
Modified Tue Jun 7 20:59:16 2005 UTC (14 years, 7 months ago) by derek
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 16810 byte(s)
Diff to previous 4740
FlowId for implementing outbound

Revision 4740 - (view) (download) (annotate) - [select for diffs]
Modified Tue May 24 21:30:57 2005 UTC (14 years, 8 months ago) by daniel
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 16547 byte(s)
Diff to previous 4599
AresDns.hxx/cxx: Redefined lookup and ares callback methonds.
DnsInterface.hxx/cxx: Added dns caching support and  methods to (un)register blacklist listener.
DnsResult.hxx/cxx: Modified to use dns caching, blacklisting, and vip; removed dead code.
Makefile: Added dns cache related files.
Security.hxx/cxx: correctly handle default paths in the constructor
SipStack.hxx/cxx: Added blacklist listener registration and unregistration.
StatelessHandler.cxx: Got it to compile with USE_IPV6 defined.
TlsConnection.cxx: Make logging less verbose.
TransactionController.hxx/cxx: Added blacklist listener registration and unregistration.
TransactionState.cxx: Added whitelisting(vip) rules.
TransportSelector.hxx/cxx: Added blacklist listener registration and unregistration; refactor and clarify for IPv6
WinSecurity.hxx/cxx: since certificates are preloaded, don't query the filesystem cert store.
dum/ClientAuthManager.cxx: changed DebugLog to InfoLog in handle method.
dum/DialogUsageManager.cxx: changed DebugLog to InfoLog in internalProcess method.
dum/test/BasicCall.cxx: added keep-alive test case.
dum/test/basicRegister.cxx: updated commandline options and simplified for TLS/IPv6.
dum/test/testIdentity.cxx: added test for identity over TLS/IPv6.
external/ExternalDns.hxx: redefined ExternalDnsHandler and lookup methods in ExternalDns class.
os/Tuple.cxx: fix constructor to copy complete IPv6 address.
os/WinCompat.hxx/cxx: add support to determine local IPv6 address; now only used on Windows platform.
os/compat.hxx: added define for T_A.

Revision 4599 - (view) (download) (annotate) - [select for diffs]
Modified Wed May 11 23:10:19 2005 UTC (14 years, 8 months ago) by derek
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 16313 byte(s)
Diff to previous 3999
set svn:eol-style to LF

Revision 3999 - (view) (download) (annotate) - [select for diffs]
Modified Wed Mar 16 19:41:28 2005 UTC (14 years, 10 months ago) by derek
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 16313 byte(s)
Diff to previous 3910
Merged in of async branch:

Major changes:

Alternative "async/external" Processing Model

The SipStack & DUM can now run w/out being in a build/select/process
loop.  This is accomplished witht ransports that provide their own cycles, as well
as an external timer api.  The SipStack is constructed w/ an
AsyncProcessHandler which gets notified when a message is put into the
StateMacFifo, or when SipStack::postMs or SipStack::post is called.  This can be
optimized a bit more; in some cases only a timer adjustment may be required, but
the stack might not require cycles.  DumProcessHandler, located in the Dum
directory, is a example of how to use this.  Note that it provides ares w/ a 50
ms timer when there is an active query.  DnsInterface now has a requiresProcess
method to facilitate this; it should possibly become another
getTimeTillNextProcess method.

Transport Refactoring/Cleanup

TransportSelector now only understands objects that derive from Transport.  The
SipStack is responsible for the Transport Factory behaviour of addTransport.  A
lot of the Transport has moved into InternalTransport, to keep the Transport
abstraction clean.  Also, the tcp transports have been cleaned up; most of dlb's
rant in ConnectionBase.hxx has been answered. 

IpVersion vs Bool IpV4

bool is no longer used to represnt IpVersion, the enum is used in tuple and
anywhere else I spotted it.

The result of this merge/cleanup has been regressed; I still need to re-write
testTransportSelector.cxx.  The async model has not been used yet with the
esult of this merge, but it was sued extensively in the branch.


Revision 3910 - (view) (download) (annotate) - [select for diffs]
Modified Fri Feb 25 01:21:05 2005 UTC (14 years, 11 months ago) by derek
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 16208 byte(s)
Diff to previous 3870
merged in character escaping(turn on or off w/ #ifdef) & some misc. changes from async branch
removed cvs version strings

Revision 3870 - (view) (download) (annotate) - [select for diffs]
Modified Sat Feb 5 02:06:43 2005 UTC (14 years, 11 months ago) by nagendra
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 15019 byte(s)
Diff to previous 3543
Security.cxx:
  - workaround for bug in PEM_read_bio_PrivateKey().

DtlsTransport.cxx:
  - error return values were being incorrectly treated in some cases.

TransportSelector.cxx:
TransportSelector.hxx:
  - DTLS transport was not being found.

Tuple.cxx:
  - Added DTLS



Revision 3543 - (view) (download) (annotate) - [select for diffs]
Modified Mon Nov 22 20:12:37 2004 UTC (15 years, 2 months ago) by dlb
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 15002 byte(s)
Diff to previous 2786
added target domain to Tuple for TLS

Revision 2786 - (view) (download) (annotate) - [select for diffs]
Modified Wed May 19 01:04:16 2004 UTC (15 years, 8 months ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 14561 byte(s)
Diff to previous 2783
fix for windows


Revision 2783 - (view) (download) (annotate) - [select for diffs]
Modified Tue May 18 23:49:02 2004 UTC (15 years, 8 months ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 14538 byte(s)
Diff to previous 2741
*** empty log message ***


Revision 2741 - (view) (download) (annotate) - [select for diffs]
Modified Thu May 13 01:59:45 2004 UTC (15 years, 8 months ago) by davidb
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 14508 byte(s)
Diff to previous 2676
If transport is bound to a specific interface, use that as the
contact. Otherwise, do the connect trick


Revision 2676 - (view) (download) (annotate) - [select for diffs]
Modified Wed Apr 21 21:20:15 2004 UTC (15 years, 9 months ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 14223 byte(s)
Diff to previous 2368
change output for subsystems, so that all RESIP log calls have a common prefix
(RESIP)


Revision 2368 - (view) (download) (annotate) - [select for diffs]
Modified Sat Feb 14 19:27:22 2004 UTC (15 years, 11 months ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 14224 byte(s)
Diff to previous 2340
fix #if guard


Revision 2340 - (view) (download) (annotate) - [select for diffs]
Modified Tue Feb 10 17:07:34 2004 UTC (15 years, 11 months ago) by alan
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 14221 byte(s)
Diff to previous 2339
oops, removed debugging


Revision 2339 - (view) (download) (annotate) - [select for diffs]
Modified Tue Feb 10 17:05:05 2004 UTC (15 years, 11 months ago) by alan
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 14326 byte(s)
Diff to previous 2233
Changes to repair multi-homed response contacts


Revision 2233 - (view) (download) (annotate) - [select for diffs]
Modified Fri Dec 12 00:03:35 2003 UTC (16 years, 1 month ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 14221 byte(s)
Diff to previous 2227
use DnsUtil


Revision 2227 - (view) (download) (annotate) - [select for diffs]
Modified Tue Dec 9 18:50:16 2003 UTC (16 years, 1 month ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 14988 byte(s)
Diff to previous 2221
set transporttype in Transport::mTuple


Revision 2221 - (view) (download) (annotate) - [select for diffs]
Modified Tue Dec 9 00:51:05 2003 UTC (16 years, 1 month ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 15226 byte(s)
Diff to previous 2219
fix bug in comparison for Tuple


Revision 2219 - (view) (download) (annotate) - [select for diffs]
Modified Tue Dec 9 00:36:51 2003 UTC (16 years, 1 month ago) by davidb
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 15528 byte(s)
Diff to previous 2211
special Tuple comaparitors for TransportSelector::findTransport


Revision 2211 - (view) (download) (annotate) - [select for diffs]
Modified Fri Dec 5 20:45:46 2003 UTC (16 years, 1 month ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 12194 byte(s)
Diff to previous 2112
added some more debug


Revision 2112 - (view) (download) (annotate) - [select for diffs]
Modified Tue Nov 4 20:00:24 2003 UTC (16 years, 2 months ago) by adamr
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 12189 byte(s)
Diff to previous 2076
Added v6 guards around code that should have had
them in the first place...


Revision 2076 - (view) (download) (annotate) - [select for diffs]
Modified Tue Oct 28 21:03:28 2003 UTC (16 years, 3 months ago) by adamr
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 12166 byte(s)
Diff to previous 1908
Added line to allow compilation under Cygwin


Revision 1908 - (view) (download) (annotate) - [select for diffs]
Modified Sat Oct 4 22:50:24 2003 UTC (16 years, 3 months ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 12090 byte(s)
Diff to previous 1905
fix compile issue


Revision 1905 - (view) (download) (annotate) - [select for diffs]
Modified Sat Oct 4 21:33:51 2003 UTC (16 years, 3 months ago) by fluffy
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 12068 byte(s)
Diff to previous 1900
fix printing of IP addr for windows


Revision 1900 - (view) (download) (annotate) - [select for diffs]
Modified Fri Oct 3 20:47:15 2003 UTC (16 years, 3 months ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 11787 byte(s)
Diff to previous 1884
fix bug in length()


Revision 1884 - (view) (download) (annotate) - [select for diffs]
Modified Fri Oct 3 01:53:14 2003 UTC (16 years, 3 months ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 11741 byte(s)
Diff to previous 1883
fix compat with intel compiler


Revision 1883 - (view) (download) (annotate) - [select for diffs]
Modified Thu Oct 2 23:28:39 2003 UTC (16 years, 3 months ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 11703 byte(s)
Diff to previous 1876
reorganize ipv6 stuff in TransportSelector, Transports and Tuple
change datastructure for storing the Transports in the TransportSelector to be
more efficient


Revision 1876 - (view) (download) (annotate) - [select for diffs]
Modified Wed Oct 1 17:53:33 2003 UTC (16 years, 4 months ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 11309 byte(s)
Diff to previous 1864
fix the cullen whirlwind


Revision 1864 - (view) (download) (annotate) - [select for diffs]
Modified Mon Sep 29 23:07:13 2003 UTC (16 years, 4 months ago) by alan
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 11182 byte(s)
Diff to previous 1862
minor compilation fixes for Linux


Revision 1862 - (view) (download) (annotate) - [select for diffs]
Modified Mon Sep 29 22:51:32 2003 UTC (16 years, 4 months ago) by alan
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 11176 byte(s)
Diff to previous 1850
TransportSelector changes.
sentPort() to clue for specifics.
Otherwise, will select tightest bound transport.
Populates topmost via with correct IP address.

 Modified Files:
 	Connection.cxx Connection.hxx ConnectionManager.cxx
 	DnsResult.cxx DnsResult.hxx Helper.cxx Makefile.am
 	StatelessHandler.cxx TcpBaseTransport.cxx TcpConnection.cxx
 	TcpConnection.hxx TcpTransport.cxx TlsConnection.hxx
 	TransactionState.cxx Transport.cxx Transport.hxx
 	TransportMessage.hxx TransportSelector.cxx
 	TransportSelector.hxx UdpTransport.cxx config.hxx.in
 	resiprocate.vcproj os/DnsUtil.cxx os/DnsUtil.hxx
 	os/Random.cxx os/Socket.cxx
 	os/Socket.hxx os/Tuple.cxx os/Tuple.hxx test/Makefile.am
 	test/testStack.cxx test/testUdp.cxx


Revision 1850 - (view) (download) (annotate) - [select for diffs]
Modified Sun Sep 28 20:26:40 2003 UTC (16 years, 4 months ago) by fluffy
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 11044 byte(s)
Diff to previous 1843
compiles under windows - added bunch of USE_IPV6 #ifdefs


Revision 1843 - (view) (download) (annotate) - [select for diffs]
Modified Sat Sep 27 17:05:29 2003 UTC (16 years, 4 months ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 10639 byte(s)
Diff to previous 1839
fixed bug with not converting port from host to network


Revision 1839 - (view) (download) (annotate) - [select for diffs]
Modified Sat Sep 27 01:49:38 2003 UTC (16 years, 4 months ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 10625 byte(s)
Diff to previous 1800
refactored the Tuple
required interface changes to the Tuple
store network address in a sockaddr structure to be generic for v4 and v6
fixed a bug in Tuple::operator<


Revision 1800 - (view) (download) (annotate) - [select for diffs]
Modified Thu Sep 18 17:16:03 2003 UTC (16 years, 4 months ago) by davidb
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 7701 byte(s)
Diff to previous 1796
refactored tcp code
refactored tls code
full support for tcpv6 with more general use
support for binding to specific interfaces
added many new DnsUtil and utilities in Tuple class


Revision 1796 - (view) (download) (annotate) - [select for diffs]
Modified Tue Sep 16 13:50:58 2003 UTC (16 years, 4 months ago) by fluffy
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 6602 byte(s)
Diff to previous 1785
fixed up license text


Revision 1785 - (view) (download) (annotate) - [select for diffs]
Modified Mon Sep 15 19:00:56 2003 UTC (16 years, 4 months ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 4229 byte(s)
Diff to previous 1758
*** empty log message ***


Revision 1758 - (view) (download) (annotate) - [select for diffs]
Modified Sun Sep 14 07:54:59 2003 UTC (16 years, 4 months ago) by fluffy
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 4411 byte(s)
Diff to previous 1749
fixed for windows


Revision 1749 - (view) (download) (annotate) - [select for diffs]
Modified Sun Sep 14 06:18:12 2003 UTC (16 years, 4 months ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 4250 byte(s)
Diff to previous 1737
fix compile


Revision 1737 - (view) (download) (annotate) - [select for diffs]
Added Sun Sep 14 03:42:10 2003 UTC (16 years, 4 months ago) by jason
Original Path: main/sip/resiprocate/os/Tuple.cxx
File length: 4236 byte(s)
moved out of Transport


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