Y      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~portable experimentalNone}Non-cumulative ack: < The client is expected to explicitly confirm the receipt  of a message by sending an   frame; + only the message with the msg-id in the   frame  is actually ack'd 9The client is expected to explicitly confirm the receipt  of a message by sending an   frame; ! all message older than the ack' d message  since the last  # (or the beginning of the session)  are implicitly ack' d as well.  This is called  cumulative ack. ;A successfully sent message is automatically considered ack'd 9The frame type identifies, what the Stomp protocol calls command; / commands sent from application to broker are: 9 Connect, Disconnect, Subscribe, Unsubscribe, Send, 0 Begin, Commit, Abort, Ack, Nack, HeartBeat / commands sent from broker to application are: * Connected, Message, Error, HeartBeat 5Sent by the broker to confirm the receipt of a frame &Sent by the broker to report an error 8Keep-alive message sent by both, application and broker <Sent by the application to negatively acknowledge a message 1Sent by the application to acknowledge a message /Sent by the application to abort a transaction 0Sent by the application to commit a transaction /Sent by the application to start a transaction 4Sent by the application to unsubscribe from a queue 0Sent by the application to subscribe to a queue (Sent by the broker to forward a message ! published in a queue to which " the application has subscribed 8Sent by the application to publish a message in a queue .Sent by the application to end the connection -Sent by the broker to confirm the connection 1Sent by the application to initiate a connection This is a frame &Description of a server consisting of  name, version and comments Heart-beat configuration;  the first ' of the pair represents the frequency 3 in which the sender wants to send heart-beats; / the second represents the highest frequency / in which the sender can accept heart-beats. " The frequency is expressed as 7 the period in milliseconds between two heart-beats. , For details on negotiating heart-beats, , please refer to the Stomp specification. 2The Stomp version used or accepted by the sender;  the first  is the major version number,  the second is the minor. 8 For details on version negotiation, please refer to  the Stomp specification. !The Frame body is represented as strict  ByteString. Tuple of (key, value) get name from  get version from  get comments from  make login header make passcode header make  client-id header make  destination header !make content-length header "make  content-type header #make  transaction header $make receipt header make  receipt-id header %make selector header &make id header (subscribe frame) 'make  message-id header (make ack header (subscribe frame) )make  subscription header *make session header (connected frame) +make message header (error frame) ,make version header (connected frame) -make accept-version header (connect frame) .make host header (connect frame) /make  heart-beat header 0make server header (connected frame) 1make a  frame (Application -> Broker).  The parameters are: + User: user to authenticate at the broker. 3 Passcode: password to authenticate at the broker.  Host: broker's virtual hoast (e.g. % stomp.broker.github.org).  !: the clients bid in negotiating " the heart-beat.  (: the versions supported by the client. = ClientId: Client identification for persistent connections. J Note that the client id is not a standard Stomp feature, = but specific to ActiveMQ and other brokers.  .: List of additional, broker-specific headers 2make a  frame (Broker -> Application).  The parameters are: 4 Session: A unique identifier created by the broker * and identifying the session  &: The heart-beat agreed by the broker  %: The version accepted by the broker  : The server description  /: List of additional, broker-specific headers. 3make a  frame (Application -> Broker).  The parameters are: A Destination: The name of the queue as it is known by the broker 9 and other applications using the queue  -: The Acknowledge Mode for this subscription 1 Selector: An expression defining those messages . that are of actual for client. 2 The Stomp protocol does not define ) a language for selectors; . it is even not entirely clear, , where messages are selected: = already at the broker, or only by the client. @ Some brokers provide pre-selection of messages,  others do not. ; Subscription Id: A unique identifier distinguishing this B subscription from others to the same queue. D The identifier is defined by the application. 9 Receipt: A unique identifier defined by the application @ to request confirmation of receipt of this frame. B If no receipt is wanted, the string shall be empty.  /: List of additional, broker-specific headers. 4make an   frame (Application -> Broker).  The parameters are: 9 Destination: The queue name; either a destination or a 2 subscription id must be given. 6 (According to protocol version 1.1, 7 the subscription id is mandatory on  both,  and  .) 3 Subscription Id: The subscription identifier (see 3)  Receipt: The receipt (see 3)  &: Additional, broker-specific headers 5make a  frame (Application -> Broker).  The parameters are: % Destination: The name of the queue 8 where the message should be published - Transaction: A unique identifier indicating ) a running transaction; . if sent with a transaction, 4 the message will not be delivered / to subscribing applications, 7 before the transaction is committed.  If the  is not part of a transaction, - the string shall be empty.  Receipt: A receipt (see 3 for details)  *: The content type of the payload message  as MIME Type ) Length: The length of the type in bytes  : List of additional headers; ; Stomp protocol requires that user-specified G headers are passed through to subscribing applications. 7 These headers may, for instance, be use 1 by selectors to select messages.  : The payload message 6make a  frame (Broker -> Application).  The parameters are: ' Subscription Id: The message was sent F because the application subscribed to the queue 5 with this subscription id (see 3). H Destination: The name of the queue, in wich the message was published. @ Message Id: A unique message identifier, defined by the broker  (: The type of the playload as MIME Type , Length: The length of the payload in bytes  &: A list of user-defined headers (see 5 for details)  : The payload 7make a   frame (Application -> Broker).  The parameters are: . Transaction: A unique transaction identifier / defined by the application.  Receipt: A receipt (see 3 for details)  &: Additional, broker-specific headers 8make a   frame (Application -> Broker).  The parameters are:   Transaction": A unique transaction identifier / defined by the application.  : A receipt (see 3 for details)  &: Additional, broker-specific headers 9make an   frame (Application -> Broker).  The parameters are: . Transaction: A unique transaction identifier / defined by the application.  Receipt: A receipt (see 3 for details)  &: Additional, broker-specific headers :make an   frame (Application -> Broker).  The parameters are: 4 Message Id: The identifier of the message to be ack'd 2 Subscription Id: The subscription, through which / the message was received 0 Transaction: Acks may be part of a transaction  (see 5 for details).  Receipt: see 3 for details ;make a  frame (Application -> Broker).  The parameters are: 5 Message Id: The identifier of the message to be nack'd 2 Subscription Id: The subscription, through which / the message was received 1 Transaction: Nacks may be part of a transaction  (see 5 for details).  Receipt: see 3 for details <make a HeatBeat" frame (Application -> Broker and 8 Broker -> Application) =make a  frame (Application -> Broker).  The parameter is:  Receipt: see 3 for details >make a  frame (Broker -> Application).  The parameter is: ? Receipt: The receipt identifier received from the application  .: List of additional, broker-specific headers ?make a  frame (Broker -> Application).  The parameters are: - Error Message Id: A short error description : Receipt Id: The receipt of frame sent by the application - to which this error relates  /: The format of the error message as MIME Type ) Length: The length of the error message  .: List of additional, broker-specific headers  : The error message @get  destination  from ,  ,  or  Aget  transaction from ,  , ,   ,   or   Bget receipt or  receipt-id from any frame, but  , , ,  Cget host from  Dget accept-version from  Eget  heart-beat from  or  Fget login from  Gget passcode from  Hget  client-id from  Iget version from  Jget session from  Kget server from  Lget id from  or   Mget ack from  Nget selector from  Oget  subscription from  ,  or  Pget body from , ,  Qget  content-type from , ,  Rget content-length from , ,  Sget message from  T get all additional headers from  or  U gets the  of a  Vappend Wcons Xsnoc Y check if  represents a valid  ^convert list of  to  _convert  to  `convert  to list of  aconvert  to  bconvert  to  cconvert  to  dconvert  to  econvert  to  fremove headers (list of ) from list of  gremove header () from list of  hconvert  to  iconvert  to  jnegotiates version - " if no common version is found, ( the function results in version 1.0! knegotiates heart-beat l0sets the transaction header to an empty string; * this is a useful function for brokers: * when a transaction has been committed,  the . messages can be handled by the same function < without, accidentally, iterating into a new transaction. m converts a  into a  n converts a  into a  o converts the  into a  pmake  frame qmake  frame rmake  frame smake  frame tmake  frame umake  frame vmake   frame wmake   frame xmake   frame ymake   frame zmake   frame {make  frame |make  frame }make  frame ~ converts a  frame into a  frame;  parameters:  message id  subscription id  The original  frame  converts a  frame into a  frame, ( negotiating heart-beats and version;  parameters:  server desc  session id  caller's bid for heart-beat  caller's supported versions  the original  frame !Compliance with protocol version   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Y123456?789:;=<>pqruvst}wxyz{| !#$%&(*+'-,./"0)a`_^bchiedjkgf]\Umno~l@ABFGHCDIEJKONLMPQRSTXWVZ[ P !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~portable experimentalNone,Parses a ByteString at once with Attoparsec .  May fail or conclude. The Stomp Parser %%      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ stompl-0.0.3Network.Mom.Stompl.FrameNetwork.Mom.Stompl.ParserAckMode ClientIndiClientAuto FrameTypeReceiptError HeartBeatNackAckAbortCommitBegin Unsubscribe SubscribeMessageSend Disconnect ConnectedConnectFrameSrvDescHeartVersionBodyHeader getSrvName getSrvVer getSrvCmtsmkLogHdr mkPassHdr mkCliIdHdr mkDestHdrmkLenHdr mkMimeHdrmkTrnHdrmkRecHdrmkSelHdrmkIdHdrmkMIdHdrmkAckHdrmkSubHdrmkSesHdrmkMsgHdrmkVerHdr mkAcVerHdr mkHostHdr mkBeatHdrmkSrvHdr mkConnect mkConnected mkSubscribe mkUnsubscribemkSend mkMessagemkBeginmkCommitmkAbortmkAckmkNackmkBeat mkDisconnect mkReceiptmkErrgetDestgetTrans getReceiptgetHost getVersionsgetBeatgetLogin getPasscodegetCliId getVersion getSession getServergetId getAcknow getSelectorgetSubgetBodygetMime getLengthgetMsg getHeaderstypeOf>|<<||> isValidAckupStringnumericgetLengetAck versToValverToVal valToVersvalToVer beatToVal valToBeatsrvToStrstrToSrvrmHdrsrmHdrackToValvalToAck negoVersionnegoBeat resetTransputFrametoString putCommand mkConFrame mkCondFrame mkDisFrame mkSndFrame mkMsgFrame mkSubFrame mkUSubFrame mkBgnFrame mkCmtFrame mkAbrtFrame mkAckFrame mkNackFrame mkRecFrame mkErrFramesndToMsg conToCondcomplies stompAtOnce stompParserghc-prim GHC.TypesInt mkRecIdHdr mime-0.3.4Codec.MIME.TypeTypebaseGHC.BaseStringbytestring-0.9.2.1Data.ByteString.Internal ByteString BeatFrameErrFramefrmMsgRecFrameMsgFrame AbrtFrame NackFrameAckFramefrmSubCmtFrameBgnFrameDisFrameSndFramefrmTransfrmLenfrmMimefrmBody USubFrameSubFramefrmDestfrmAckfrmSelfrmIdfrmRec CondFramefrmSesfrmVerfrmSrvConFramefrmLoginfrmPassfrmHostfrmBeatfrmAcVerfrmCliIdfrmHdrsnoBeatdefMime defVerStr defVersion noSrvDeschdrLoghdrPasshdrCliIdhdrDesthdrSubhdrLenhdrMimehdrTrnhdrRechdrRecIdhdrSelhdrIdhdrAckhdrSeshdrMsghdrMIdhdrAcVerhdrVerhdrHosthdrBeathdrSrvmkHeader cleanWhite putHeaders putHeader toHeaders subRecTrn normaliseputBody findStrHdr findSubRecTrngetHdrs $fReadAckMode $fShowAckModeattoparsec-0.10.4.0#Data.Attoparsec.ByteString.Internal parseOnlymsgTypebeatsendmessageprsError bodyFrameconnect connected disconnect subscribe usubscribebegincommitabortacknackreceipt genericFrameheadersheaders' endHeaders getHeaderheader keyValSepterminalbody ignoreBody skipWhiteendAnyendLinenuleolspccol failBodyLen