Some notes on Cisco IP phones (specifically the 7940/7960s I have).
Identifying the phone
You can identify the client by looking at the Accept headers in the request.
A Cisco IP Phone will indicate the following:
Accept: x-CiscoIPPhone/*;version=2.0, text/*
2.0 is the version of the IP Phone services schema. It can also accept text/*, where text/plain and text/xml are supported natively, and any other type is displayed as-is on screen (HTML source for example).
Versions prior to 2.0 do not support cookies.
The first page the client requests will include the phone's MAC address and load type (SIP/SEP/??for mgcp?), e.g. /phones/?name=SIP00309FA20010.
Why not WAP?
You'd think WAP would be a natural fit for the IP phones. WAP was designed for cellphones, it deals with the problems of a low-power CPU and a small screen. In fact the Cisco IP screen is no bigger than a typical cellphone when you consider its poor resolution and the fact that only part of the screen is available to services.
So why didn't they use WAP, which was already a standard and has been for some years?
According to Developing Cisco IP Phone Services, "WAP is just a low-bandwidth protocol for Web page retrieval. Cisco IP Phones run over a 10/100MB link, so we can push more data". But, the services schema used at the moment is highly simple and lacking in features, and in no way takes advantage of the high bandwidth, low latency links available. Even if they didn't implement the WAP suite, they could have used WML for markup and accessed it directly over HTTP. The last possibility of course is the WAP licensing fees, but you'd think that a company like Cisco could afford those.
It bugs the hell out of me that Cisco created a new schema for their phone rather than leveraging a standard, especially since WAP has now taken off in a big way and a plethora of services are available to it. A WML->CMXML gateway to bring back this functionality may have been a useful project at one point, but I've rather overdosed on IP telephony recently and lost interest: