Re: SIP and Apache

The Jester (
Sat, 19 Jun 1999 11:45:22 -0700 (PDT)

On the UDP issue, several groups, including IMPP, GENA and UPnP have all
had to do work on HTTP over UDP. Last week at the UPnP Forum I presented a
summary of three drafts I have written. The first is HTTP over multicast
and unicast UDP. The second is a new version of the GENA spec which is
stripped down a bit. The third is a new version of the Simple Service
Discovery Protocol (SSDP) spec which is based on the previous two. All
three should show up in the ID directory sometime next week.

As for the other issues, absolutely SIP introduces new features into HTTP,
as well it should. The reason for wanting SIP running over HTTP is that
there is no reason that normal SIP communications should be prevented from
flowing through normal HTTP firewalls and proxies on their way to SIP
enhanced proxies. All the normal HTTP authentication and caching
infrastructure would still apply. In addition using HTTP allows for SIP
end points to be written using normal HTTP development environments. I for
one believes this is a compelling advantage for administrators and

I haven't felt this level of righteous indignation since an old boss told
me that WebDAV was a waste of time.


> Errrrmmm... I'm not the best person to contact wrt Apache politics
> these days, and I derailed reading your message fairly quickly. Also,
> I'm not really familiar with streaming audio at anything resembling a
> technical level. So take everything below as a quick, sloppy guess,
> concentrating purely on technical issues...
> Ian Andrew Bell writes:
> > RST and others..
> >
> > IMHO, the relationships defined in IP Telephony architectures like DCS
> > and DOSA around SIP and RTP streams are identical to the relationships
> > between an HTTP server that guides us through selectable MP3 streams.
> This is where I start to derail... the relationships between an HTTP
> server (that guides...) and what other entity? And how does this
> guiding take place?
> > This leads us to
> >
> > So am I wrong in thinking that Apache, as an HTTP server, lends itself
> > particularly well to being a SIP Call Agent? SIP and HTTP are identical
> > in that they are stateless, can pass MIME types, and do not sustain
> > connections. SIP has provision for a CGI architecture, as well.
> >
> > Does anyone think I'm crazy, after reading the IETF doc, to figure that
> > a port of Apache code to SIP is simply a case of adding new message
> > types, modifying port numbers, and broadening CGI handling?
> Well, like I said, my familiarity with SIP in particular, and
> streaming audio in general, is at this point pretty minimal. From a
> quick skim of the SIP RFC, I came away with the following impressions,
> though I'd welcome corrections from anyone who has actual information.
> First, HTTP presumes a reliable transport. SIP, which can be
> implemented over UDP, can't presume one. This means that all SIP
> servers (or at least anything decent enough to work with UDP) will
> need some retransmission handling logic which is not present in
> Apache. And nothing in HTTP ever has to deal with anything like
> multicast. So, you need some new hair on the low-level I/O.
> Second, SIP *connections* may be stateless, but SIP requests specify
> operations on a stateful infrastructure which isn't present in Apache.
> This includes both SIP-specific parts (whatever keeps enough
> information about pending operations to sensibly handle a CANCEL
> request), and the streaming connection mechanism itself (which is
> separate from the session-initiation machinery that SIP uses, and
> probably more work to build). In other words, a SIP server by itself
> isn't much good; it needs to be tied to some kind of streaming media
> server, and that's probably harder to write than the SIP service.
> (The handling of this sort of state in Apache isn't as simple as
> building some data structure that sits in memory somewhere; Apache is
> currently a multi-process server, and a BYE or CANCEL may not get
> serviced by the same process that handled the INVITE. You can put it
> in shared memory --- I understand Ralf Engelschall has put together a
> library which tries to smooth over the portability problems --- but
> then you have to worry a bit about locking strategy to protect the
> indexes and handle multiparty calls right. And CANCEL handling is
> potentially nastier; there's the question of how process A finds out
> that the request it's working on has been asynchronously cancelled by
> process B --- do you do asynch notification, or does something
> periodically poll the shared state? It's not trivial. Note also that
> a CGI-style extension mechanism would have to have some way of
> plugging into this state to be any use at all).
> Third, and less importantly, the routing functions performed by SIP
> forking proxies (which have to contact multiple downstream servers in
> parallel if they want to do a decent job) don't correspond to anything
> in HTTP. There are HTTP proxies which do similar things (e.g., asking
> several partner caches, in parallel, if they have a copy of requested
> content before hitting the origin server), but I don't believe they
> use HTTP to do it.
> In short, SIP has some similarities to HTTP, but it seems to me that
> there are enough significant differences that I don't think you could
> make a useful SIP server simply by taking Apache and filing the
> numbers off --- at least not if you wanted to implement any level of
> SIP support beyond the rock-bottom bare minimum. A call center has to
> do a lot of things that Apache simply doesn't do, and I'm not sure I
> see a way around writing new code that does them.
> Whether Apache is a useful place to *start* is a different question;
> there's a lot of useful utility code in there which doesn't have all
> that much to do with HTTP in particular. It's largely a matter of
> whether the benefit you get from the stuff you can use is worth the
> price of putting up with the stuff you don't use (it can conceivably
> get in the way). But I think you do have to write substantial new
> code to get a call center that does enough to be any use; I don't see
> it as a quick slam-dunk...
> rst