Revision history for Net::SIP

   - enforce codec 0 PCMU/8000 in outgoing SDP generated based on
     incoming SDP, don't just accept all codecs the other party offers
     because Net::SIP::Simple can only PCMU/8000
   - make header names per default ucfirst (Via not via)
   - add default allow and supported headers to INVITE requests and
     2xx responses if none where given
   - fix bug indroduced in 0.42, where contact from incoming INVITE
     was not used as URI for outgoing BYE for the call

   - on 2xx responses set the URI of the dialog to the contact given
     in the response. For 302 retry the request with the URI set to
     the contact given in the 302 response.
   - make sure that the right contact header is set. for outgoing
     invites and 2xx responses to invite combine the user part from the 
     sender ('from' for requests, 'to' for responses) with addr and port 
     from the outgoing leg - unless the contact was explicitly set.
   - if a contact header was given in Net::SIP::Simple which had a
     port specification the port would be duplicated, e.g. 

   - give 'contact' header to Net::SIP::Simple which is then used for
     invite and register
   - more checks of data when parsing SIP header, more knowledge about 
     keys, where the values cannot be comma-seperated
   - fix wrong call of ok() in t/03_forward_stateless
   - fix
     (Net::SIP::Request::set_uri did not update string representation)

  - Net::SIP::Simple::RTP - when sending data from file set the timestamp
    based on sequence number and packet size ( == samples in packet for 8bit)
  - set Via header correct in the case of udp and port 5061.
    No longer set Via based on contact header, base it only on address
    of leg
  - primitive support for other codecs in Net::SIP::Simple, see 
    rtp_param in Net::SIP::Simple::Call

  - work around missing support for non-blocking sockets in IO::Socket
    on MSWin32 platform
  - fix where the same realm
    was authorized again and again if the given user/pass where wrong

  - fix dns lookup problem for SRV records. Instead of using the
    IP it used the service name (e.g. _sip._udp....) as the target
    of the packet
  - bin/ - crude attempt to create filenames
    which don't have chars special to windows ('<',...)

  - Endpoint::close_context now cancel all outstanding deliveries 
    for this context in the dispatcher. Extented queue objects 
    and Dispatcher::cancel_delivery to make this possible
  - tests for file descriptor leaks (09_fdleak.t,10_fdleak.t)
  - some more Scalar::Util::weaken for callbacks in Simple::Call
    to stop circular references

  - small performance improvements for Net::SIP::Simple::RTP
    and samples/bench
  - fixed race condition on Net::SIP::Dispatcher::Eventloop (e.g
    one callback disabled fd, but it tried to call callback for the
    disabled fd)
  - added Net::SIP::Simple::cleanup and made some references to the
    objects within callbacks weak, so that no objects and file
    descriptors would leak if properly used

  - Net::SIP::Simple::Call - close call context in $call->cleanup,
    otherwise it could leak file descriptors if the call wasn't
    closed clean (with BYE or CANCEL).
  - new test applications for simple benchmarks in samples/bench
  - documentation: new file samples/README describes the files in 

  - Net::SIP::Simple: handle OPTIONS requests. These are for 
    instance used by Asterisk to determine if the registered 
    party accepts incoming calls.
  - fix rt#29153 in ($1 from prev regex
    used after call of user function, which could change it)
  - Endpoint::new_response - make sure that 2xx responses to
    INVITE carry a contact header

  - Net::SIP::Registrar checks on non-REGISTER requests if the
    target it registered with itself and then rewrites the URI in
    the packet. This can be used for a combined Registar+Proxy,
    see samples/
  - samples/invite_and_*.pl have now option -L|--leg to specify
    a local address

  - make it usable for perl5.9, tested with 5.9.5

  - Option cb_preliminary for Simple::Call:reinvite to specify
    callback which will be triggered when preliminary response
    is received
    more parameter for cb_create in Simple::listen, so that
    it can create a response (like 180 Ringing) to the peer
    see documentation and the adapted t/02_listen_and_invite.t

  - make sure that max-forwards is added to every Request from the
    endpoint and that all INVITE have a contact header because these
    are mandatory according to RFC
  - invoke 'filter' callback in Net::SIP::Simple::listen with the
    Request object as an additional argument, cb_create callback
    in listen needs to return TRUE or the call will be closed
    !!!! Warning: this might break code which did not return TRUE
    from cb_create !!!!!

  - - make sure that nc-count is send when authorizing
    and qop was set. This is required according to rfc2617

  -, - support 'opaque' field in digest
    authorization (when authorizing or when requesting authorization)

  - - fix regex for IP4 which did not include all IPv4 addr

  - small fixes to SDP
  - added concept of chains, e.g. put an Authorize object in
    front of Registrar inside a ReceiveChain and all REGISTER
    requests will be authorized,
    see Net::SIP::{Authorize,ReceiveChain}
  - StatelessProxy can no longer have an internal Registrar.
    use ReceiveChain to put a Registrar in front of the proxy
  - new test t/ to test Authorize 
    and ReceiveChain
  - fix Request::authorize
  - make adding commands to NATHelper::Server easier
  - add user params for NATHelper::Session during activate_session
  - SDP: make sure that IP4/IP6 is valid IP
  - small fixes

  - fix memleak in NATHelper::Base
  - support for derived NATHelper::Base in NATHelper::Server 
  - update docu for NATHelper::Base::expire

  - enforce perl5.8 and prerequisite Net::DNS in Makefile.PL
  - NATHelper::Base - more controling of resource usage with
    max_sockets and max_sockets_in_group and/or by redefining

  - new sample samples/ for 3rd party call control
  - small fixes

  - enhancements on tests, new tests for reinvite and call on hold
  - lots of bugfixes: re-invites, NAT, call on hold, branch tag
    on via and 'tag' on to|from in responses, max-forwards handling,
    response caching in dispatcher....
  - set route from record-route in responses, use route header
    in dispatching outgoing requests
  - early loop detection for outgoing packets
  - new param call_on_hold for Net::Simple::Call to set call on
    hold on reinvite...

  - NATHelper::* changes in the return values of expire,
    close_session, activate_session to aid logging of
    sessions (see updated doc)
  - NATHelper::Local has smarter _update_callbacks
  - bugfixes, especially on Net::Simple regarding handling 
    of re-invites in existing call
  - new test t/06_call_with_reinvite.t

  - added documentation for Net::SIP::NATHelper::*
  - updated doc for Net::SIP::StatelessProxy regarding NAT
  - added HOWTO with some Q+A
  - added COPYRIGHT
  - new method 'method' in Net::SIP::Response
  - small bugfixes

  - lots of bugfixes
  - removed leg2proxy and domain2leg from Net::SIP::Dispatcher
    again because they do not fit into concept, see 
	bin/ how to achieve similar things
  - lot of bugfixes, changes and enhancement on StatelessProxy
  - Net::SIP can now export useful things, see doc
  - a lot of enhancements for NAT, implementation of local
    (inside process) and remote NAT helpers which forward
	RTP data
  - Net::SIP::Dispatcher: lookup for A an SRV records now in
    seperate, callback oriented method (which are not asynchronous
	yet, but have an asynchronous interface)
  - moved real world usable programs from samples/ to bin/
  - more tests, samples/ and bins/

  - various bugfixes
  - limit Max-Forwards header to 70 while forwarding packets
    for security reasons (to avoid bad clients which will set
    it to something very high and then try to force loop)
  - do not add Record-Route header to REGISTER requests
  - major changes and enhancements on Net::SIP::StatelessProxy
  - rename Net::SIP::Dispatcher::Eventloop::addTimer to add_timer
    so that it is the same name like in the other modules
  - Net::SIP::Simple: way to add explicit Route headers#
  - new package Net::SIP::NATHelper do aid in the writing of 
    SIP proxies which do NAT (no documentation yet)
  - support for debug levels in Net::SIP::Debug
    sample scripts support various debug levels, see doc to
    Net::SIP::Debug for meaning of different levels
  - samples/ as sample implementation for
    slightly complex stateless proxy (not fully tested yet)
  - new function sip_uri2parts in Net::SIP::Util
  - ways to specify custom headers in Net::SIP::Simple using
    option 'sip_header'
  - new keys domain2leg and leg2proxy in Net::SIP::Dispatcher
    which influence routing
  - new method resolve_uri in Net::SIP::Dispatcher to asnychronously
    resolve URI (was __resolve_uri, but now public with slightly
    different interface)
  - new test 03_forward_stateless which tests parts of routing
    for stateless proxy

  - forgot to include samples to MANIFEST, this is fixed now
    so that they get included into the distribution

  - samples/ as a sample implementation
    of an answer machine
  - new methods peer in Net::SIP::Endpoint::Context and
    get_peer in Net::SIP::Simple::Call
  - fix inactivity timeout for media_recv_send in Net::SIP::Simple::RTP
  - media_send_recv, media_recv_echo in Net::SIP::Simple::RTP can use 
    callback for read/write data instead of filenames

  - samples/ as new sample client
    which can invite and send multiple voice file
    to peer (using re-invites)
  - various small bug fixes

  - samples/ as new sample client
    which can invite and record a message
  - various small features and bug fixes

0.1 - first public version