%% WSP Table 34. PDU Type Assignments %% -define(WSP_Connect, 16#01). -define(WSP_ConnectReply, 16#02). -define(WSP_Redirect, 16#03). -define(WSP_Reply, 16#04). -define(WSP_Disconnect, 16#05). -define(WSP_Push, 16#06). -define(WSP_ConfirmedPush, 16#07). -define(WSP_Suspend, 16#08). -define(WSP_Resume, 16#09). -define(WSP_Get, 16#40). -define(WSP_Options, 16#41). -define(WSP_Head, 16#42). -define(WSP_Delete, 16#43). -define(WSP_Trace, 16#44). -define(WSP_Post, 16#60). -define(WSP_Put, 16#61). -define(WSP_DataFragmentPDU, 16#80). %% %% WSP Table 37. Capability Assignments %% -define(WSP_CAP_CLIENT_SDU_SIZE, 16#00). -define(WSP_CAP_SERVER_SDU_SIZE, 16#01). -define(WSP_CAP_PROTOCOL_OPTIONS, 16#02). -define(WSP_CAP_METHOD_MOR, 16#03). -define(WSP_CAP_PUSH_MOR, 16#04). -define(WSP_CAP_EXTENDED_METHODS, 16#05). -define(WSP_CAP_HEADER_CODE_PAGES, 16#06). -define(WSP_CAP_ALIASES, 16#07). -define(WSP_CAP_CLIENT_MESSAGE_SIZE, 16#08). -define(WSP_CAP_SERVER_MESSAGE_SIZE, 16#09). -define(WSP_CODEPAGE_1, 1). -define(WSP_DEFAULT_CODEPAGE, ?WSP_CODEPAGE_1). -define(ANY_LANGUAGE,128). -define(WSP_10, {1,0}). -define(WSP_11, {1,1}). -define(WSP_12, {1,2}). -define(WSP_13, {1,3}). -define(WSP_14, {1,4}). -define(WSP_15, {1,5}). -define(WSP_COMPLIENT_VERSION, ?WSP_15). -define(WSP_DEFAULT_VERSION, ?WSP_12). -define(WSP_STATUS_CONTINUE, 100). -define(WSP_STATUS_SWITCHING_PROTOCOLS, 101). -define(WSP_STATUS_OK, 200). -define(WSP_STATUS_CREATED, 201). -define(WSP_STATUS_ACCEPTED, 202). -define(WSP_STATUS_NON_AUTHORITATIVE_INFORMATION, 203). -define(WSP_STATUS_NO_CONTENT, 204). -define(WSP_STATUS_RESET_CONTENT, 205). -define(WSP_STATUS_PARTIAL_CONTENT, 206). -define(WSP_STATUS_MULTIPLE_CHOICES, 300). -define(WSP_STATUS_MOVED_PERMANENTLY, 301). -define(WSP_STATUS_MOVED_TEMPORARILY, 302). -define(WSP_STATUS_SEE_OTHER, 303). -define(WSP_STATUS_NOT_MODIFIED, 304). -define(WSP_STATUS_USE_PROXY, 305). -define(WSP_STATUS_RESERVED, 306). -define(WSP_STATUS_TEMPORARY_REDIRECT, 307). -define(WSP_STATUS_BAD_REQUEST, 400). -define(WSP_STATUS_UNAUTHORIZED, 401). -define(WSP_STATUS_PAYMENT_REQUIRED, 402). -define(WSP_STATUS_FORBIDDEN, 403). -define(WSP_STATUS_NOT_FOUND, 404). -define(WSP_STATUS_METHOD_NOT_ALLOWED, 405). -define(WSP_STATUS_NOT_ACCEPTABLE, 406). -define(WSP_STATUS_PROXY_AUTHENTICATION_REQUIRED, 407). -define(WSP_STATUS_REQUEST_TIMEOUT, 408). -define(WSP_STATUS_CONFLICT, 409). -define(WSP_STATUS_GONE, 410). -define(WSP_STATUS_LENGTH_REQUIRED, 411). -define(WSP_STATUS_PRECONDITION_FAILED, 412). -define(WSP_STATUS_REQUEST_ENTITY_TOO_LARGE, 413). -define(WSP_STATUS_REQUEST_URI_TOO_LARGE, 414). -define(WSP_STATUS_UNSUPPORTED_MEDIA_TYPE, 415). -define(WSP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE, 416). -define(WSP_STATUS_EXPECTATION_FAILED, 417). -define(WSP_STATUS_INTERNAL_SERVER_ERROR, 500). -define(WSP_STATUS_NOT_IMPLEMENTED, 501). -define(WSP_STATUS_BAD_GATEWAY, 502). -define(WSP_STATUS_SERVICE_UNAVAILABLE, 503). -define(WSP_STATUS_GATEWAY_TIMEOUT, 504). -define(WSP_STATUS_HTTP_VERSION_NOT_SUPPORTED, 505). -define(ENCODE_SHORT(X), <<1:1, (X):7>>). -define(ENCODE_LONG(X), if (X) =< 16#ff -> <<1, (X):8>>; (X) =< 16#ffff -> <<2, (X):16>>; (X) =< 16#ffffff -> <<3, (X):24>>; (X) =< 16#ffffffff -> <<4, (X):32>>; true -> encode_long1(X) end). -record(wsp_session, { id, %% uniq session id ref, %% address quadruple (socketpair) state=null, %% connected, suspended version, %% encoding version to use capabilities, %% client capabilities headers %% client hop-by-hop headers!!! }). -record(wsp_header, { name, %% field name value, %% field value (binary value) params=[] %% field params [{Name,Value} | Value] }). -record(wsp_multipart_entry, { content_type, %% #wsp_header headers=[], data=(<<>>) }). -record(wsp_capabilities, { aliases=[], %% [#wdp_address] client_sdu_size=1400, extended_methods=[], %% [{PduType, Name}] header_code_pages=[], %% [{Page,Name}] | [Page] protocol_options=[], %% [push,confirmed_push,resume, %% acknowledgement_headers] method_mor = 10, %% 1? push_mor = 10, %% 1? server_sdu_size=1400, client_message_size, server_message_size, unknown=[] }). %% WSP PDU records -record(wsp_connect, { version, %% protocol version, not wsp version? capabilities, headers }). -record(wsp_connect_reply, { server_session_id, capabilities, headers=[] }). -define(WSP_PERMANENT_REDIRECT, 16#80). -define(WSP_REUSE_SECURITY, 16#40). -record(wsp_redirect, { flags=[], addresses=[] }). -record(wsp_disconnect, { server_session_id }). -record(wsp_get, { type, uri, headers=[] }). -record(wsp_post, { type, uri, content_type, %% #wsp_header headers=[], data }). -record(wsp_reply, { status, content_type, %% #wsp_header headers=[], data }). -record(wsp_data_fragment_pdu, { headers=[], data }). -record(wsp_push, { type = push, content_type, %% #wsp_header headers=[], data }). -record(wsp_suspend, { session_id }). -record(wsp_resume, { session_id, capabilities, headers }). %% NOTE: not a real pdu -record(wsp_acknowledgement_headers, { headers=[] }). -record(wsp_unknown_pdu, { type, %% integer data %% the payload }).