packages feed

stomp-queue 0.2.0 → 0.2.1

raw patch · 6 files changed

+377/−350 lines, 6 files

Files

Network/Mom/Stompl/Client/Queue.hs view
@@ -27,6 +27,7 @@                    Factory.Con,                     F.Heart,                    Copt(..),+                   EHandler,                    -- * Queues                    -- $stomp_queues                    Reader, Writer, @@ -399,10 +400,10 @@       me  <- myThreadId     -- connection owner       now <- getCurrentTime -- heartbeat       ch  <- newChan        -- sender-      bracket (do addCon $ mkConnection cid host port -                                            mx   u p ci -                                            vers beat ch -                                            me now os+      bracket (do addCon $ (mkConnection cid host port +                                             mx   u p ci +                                             vers beat ch +                                             me now os)                   getCon cid)               (\_ -> rmCon cid) $ \c ->          withSender c ad ch $ do@@ -484,12 +485,15 @@              updCon cid c {conBrk = True}               finally (act cid) (do                c' <- getCon cid-               -- wait for receipt on disconnect -----               unless (conWait c' <= 0) $ do+               unless (conWait c' <= 0) $ do -- wait for receipt                  rc <- mkUniqueRecc                   disconnect c' (show rc)                  addRec cid rc-                 waitCon cid rc (conWait c') `onException` rmRec cid rc)+                 waitCon cid rc (conWait c') `onException` rmRec cid rc+               -- if we not have waited for a receipt,+               --    wait now for error handling to terminate+               when (conWait c' <= 0 && conWaitE c' > 0) $+                 threadDelay $ ms (conWaitE c'))            period = snd . conBeat    ---------------------------------------------------------------------@@ -1478,10 +1482,12 @@   handleError :: Con -> F.Frame -> IO ()   handleError cid f = do     c <- getCon cid-    let r = if null (F.getReceipt f) then ""-              else " (" ++ F.getReceipt f ++ ")" -    let e = F.getMsg f ++ r ++ ": " ++ U.toString (F.getBody f)-    throwToOwner c (BrokerException e) +    case getEH c of +      Just eh -> eh cid f+      Nothing -> let r | null (F.getReceipt f) = ""+                       | otherwise             = " (" ++ F.getReceipt f ++ ")"+                     e = F.getMsg f ++ r ++ ": " ++ U.toString (F.getBody f)+                  in throwToOwner c (BrokerException e)     -----------------------------------------------------------------------   -- Handle Receipt Frame
Network/Mom/Stompl/Client/State.hs view
@@ -3,9 +3,11 @@          msgContent, numeric, ms,          Connection(..), mkConnection,          connected, getVersion, +         EHandler,+         getEH,           Copt(..),          oHeartBeat, oMaxRecv,-         oAuth, oCliId, oStomp, oTmo, oTLS,+         oAuth, oCliId, oStomp, oTmo, oTLS,oEH,          Transaction(..),          Topt(..), hasTopt, tmo,          TxState(..),@@ -89,38 +91,48 @@   type Receipt = Fac.Rec    ------------------------------------------------------------------------+  -- | Action executed when an Error Frame is received;+  --   the typical use case is logging the text of the Error Frame.+  ------------------------------------------------------------------------+  type EHandler = Fac.Con -> F.Frame -> IO ()++  ------------------------------------------------------------------------   -- Connection   ------------------------------------------------------------------------   data Connection = Connection {-                      conId      :: Fac.Con,-                      conAddr    :: String,   -- the broker's IP address-                      conPort    :: Int,      -- the broker's port-                      conMax     :: Int,         -- max receive-                      conUsr     :: String,      -- user-                      conPwd     :: String,      -- passcode-                      conCli     :: String,      -- client-id-                      conSrv     :: String, -- server description-                      conSes     :: String, -- session identifier (from broker)-                      conVers    :: [F.Version], -- the accepted versions-                                               -- the agreed version -                                               -- after connect-                      conBeat    :: F.Heart, -- the heart beat-                      conChn     :: Chan F.Frame, -- sender channel+                      conId      :: Fac.Con,        -- Con handle+                      conAddr    :: String,         -- the broker's IP address+                      conPort    :: Int,            -- the broker's port+                      conMax     :: Int,            -- max receive+                      conUsr     :: String,         -- user+                      conPwd     :: String,         -- passcode+                      conCli     :: String,         -- client-id+                      conSrv     :: String,         -- server description+                      conSes     :: String,         -- session identifier +                      conVers    :: [F.Version],    -- accepted versions+                      conBeat    :: F.Heart,        -- the heart beat+                      conChn     :: Chan F.Frame,   -- sender channel                       conBrk     :: Bool,-                      conOwner   :: ThreadId,-                      conHisBeat :: UTCTime,-                      conMyBeat  :: UTCTime, -                      conWait    :: Int,-                      conSubs    :: [SubEntry],-                      conDests   :: [DestEntry], -                      conThrds   :: [ThreadEntry],-                      conErrs    :: [F.Frame],-                      conRecs    :: [Receipt],-                      conAcks    :: [MsgId]}+                      conOwner   :: ThreadId,       -- thread that created +                                                    -- the connection+                      conEH      :: Maybe EHandler, -- Error Handler+                      conHisBeat :: UTCTime,        -- broker's next beat+                      conMyBeat  :: UTCTime,        -- our next beat+                      conWait    :: Int,            -- wait for receipt+                                                    -- before terminating+                      conWaitE   :: Int,            -- wait on error handling+                      conSubs    :: [SubEntry],     -- subscriptions+                      conDests   :: [DestEntry],    -- destinations+                      conThrds   :: [ThreadEntry],  -- threads with transactions+                      conRecs    :: [Receipt],      -- expected receipts +                      conAcks    :: [MsgId]}        -- expected acks     instance Eq Connection where     c1 == c2 = conId c1 == conId c2 +  -------------------------------------------------------------------------+  -- Make a connection. Quite ugly.+  -------------------------------------------------------------------------   mkConnection :: Fac.Con -> String -> Int         ->                               Int    -> String      -> String   ->                               String -> [F.Version] -> F.Heart  -> @@ -128,7 +140,9 @@                              UTCTime               -> [Copt]   -> Connection   mkConnection cid host port mx usr pwd ci vs hs chn myself t os =      Connection cid host port mx usr pwd ci "" "" vs hs chn False -                   myself t t (oWaitBroker os) [] [] [] [] [] []+                   myself (oEH os) t t +                          (oWaitBroker os) +                          (oWaitError  os) [] [] [] [] []    -------------------------------------------------------------------------   -- | Options passed to a connection@@ -149,6 +163,13 @@     --   it is advisable to use this option.     OWaitBroker Int | +    -- | Wait /n/ milliseconds +    --   after the connection has been closed by the broker+    --   to give the library some time to process+    --   the error message (if one has been sent).+    --   +    OWaitError  Int |+     -- | The maximum size of TCP/IP packets.     --   This option is currently ignored.     --   Instead, 'Data.Conduit.Network' defines@@ -183,12 +204,21 @@     -- | 'TLSClientConfig'     --        (see 'Data.Conduit.Network.TLS' for details)     --   for TLS connections.-    --   If the parameter is not given, +    --   If the option is not given,      --      a plain TCP/IP connection is used.-    OTLS TLSClientConfig+    OTLS TLSClientConfig | +    -- | Action to handle Error frames;+    --   if the option is not given,+    --   an exception is raised on arrival of an error frame.+    --   If it is given, one should also pass a value+    --   for OWaitError to give the error handler time+    --   to execute.+    OEH EHandler+   instance Show Copt where     show (OWaitBroker i) = "OWaitBroker" ++ show i+    show (OWaitError  i) = "OWaitError " ++ show i     show (OMaxRecv    i) = "OMaxRecv "   ++ show i     show (OHeartBeat  h) = "OHeartBeat " ++ show h     show (OAuth     u p) = "OAuth " ++ u ++ "/" ++ p@@ -196,9 +226,11 @@     show  OStomp         = "OStomp"       show (OTmo        i) = "OTmo"        ++ show i     show (OTLS        c) = "OTLS      "  ++ show (tlsClientUseTLS c)+    show (OEH         _) = "OEHandler "      instance Eq Copt where     (OWaitBroker i1) == (OWaitBroker i2) = i1 == i2+    (OWaitError  i1) == (OWaitError  i2) = i1 == i2     (OMaxRecv    i1) == (OMaxRecv    i2) = i1 == i2      (OHeartBeat  h1) == (OHeartBeat  h2) = h1 == h2     (OAuth    u1 p1) == (OAuth    u2 p2) = u1 == u2 && p1 == p2@@ -206,6 +238,7 @@     (OTmo        i1) == (OTmo        i2) = i1 == i2     (OTLS        c1) == (OTLS        c2) = tlsClientUseTLS c1 &&                                             tlsClientUseTLS c2+    (OEH          _) == (OEH          _) = True     OStomp           == OStomp           = True     _                == _                = False @@ -214,6 +247,7 @@   ------------------------------------------------------------------------   is :: Copt -> Copt -> Bool   is (OWaitBroker _) (OWaitBroker _) = True+  is (OWaitError  _) (OWaitError  _) = True   is (OMaxRecv    _) (OMaxRecv    _) = True   is (OHeartBeat  _) (OHeartBeat  _) = True   is (OAuth     _ _) (OAuth     _ _) = True@@ -221,6 +255,7 @@   is (OStomp       ) (OStomp      )  = True   is (OTmo _       ) (OTmo _      )  = True   is (OTLS      _  ) (OTLS      _ )  = True+  is (OEH       _  ) (OEH       _ )  = True   is _               _               = False    noWait :: Int@@ -243,6 +278,11 @@                      Just (OWaitBroker d) -> d                      _   -> noWait +  oWaitError  :: [Copt] -> Int+  oWaitError  os = case find (is $ OWaitError  0) os of+                     Just (OWaitError d) -> d+                     _   -> noWait+   oMaxRecv :: [Copt] -> Int   oMaxRecv os = case find (is $ OMaxRecv 0) os of                   Just (OMaxRecv i) -> i@@ -275,10 +315,16 @@    oTLS :: String -> Int -> [Copt] -> TLSClientConfig   oTLS h p os = case find (is $ OTLS dcfg) os of-                  Just (OTLS cfg) -> cfg-                  _               -> dcfg+                     Just (OTLS cfg) -> cfg+                     _               -> dcfg     where dcfg = (tlsClientConfig p $ B.pack h){tlsClientUseTLS=False} +  oEH :: [Copt] -> Maybe EHandler+  oEH os = case find (is $ OEH deh) os of+             Just (OEH eh) -> Just eh+             _             -> Nothing+    where deh _ _ = return ()+   findCon :: Fac.Con -> [Connection] -> Maybe Connection   findCon cid = find (\c -> conId c == cid) @@ -309,6 +355,9 @@   getVersion c = if null (conVers c)                     then defVersion                    else head $ conVers c++  getEH :: Connection -> Maybe EHandler+  getEH = conEH     ------------------------------------------------------------------------   -- Sub, Dest and Thread Entry
+ changelog.md view
@@ -0,0 +1,93 @@+__0.2.0__ +   Changes:++          - Low-level sockets were replaced by network-conduit-tls+            (Be aware that this change might introduce some+             subtle changes in behaviour concerning in particular +             performance and connection handling)++          - OMaxRecv not used anymore++          - New Option OTLS for TLS connections++          - New Option OTmo to specify a connection timeout++__0.1.4__ +   Changes:++          - New: destroyReader and destroyWriter++          - Patterns deprecated++__0.1.3__ +   New Option for newWriter 'ONoContentLen'+++__0.1.2__ +   Minor changes:++          - Dependency for stompl-0.1.1++          - Some more enquiries into potential mem leaks,+            but more to follow++__0.1.1__ +   Dependency for bytestring 0.10++__0.1.0__ +   Major changes:++          - Compliance with Stomp 1.2:++          - There are major changes in the frame format,+            please refer to the documentation of the +            stompl package, version 0.1.0, there are important changes+            that may impact messages for older versions!++          - When generating an Ack frame,+            the *id* header is by default taken from the *ack* header+            in the corresponding Message frame.+            Should there be no *ack* header or if its value is empty,+            the value of the header *message-id* is taken.+            This behaviour complies with 1.2 +            for brokers supporting this version,+            but also continues to work with 1.1 brokers.++          - It is now possible to send a Stomp frame+            to connect to a broker (the broker, of course,+            has to accept Stomp frames and process them correctly).+            There is a new Copt (*OStomp*) to support this feature.++__0.0.8__ +   Client/Server on top of Queues.++__0.0.7__ +   Fighting with hackagedb...++__0.0.6__ +      Heartbeats caused a memory leak by creating +      many Connection instances in the connection state list.+      The connections were lazily deleted, i.e. were+      not deleted at all.+      Connection state is now cleaned up by a strict delete.++__0.0.5__ +   Major changes:++          - Underscore functions (*withConnection_*) removed; ++          - New *with* functions: *withWriter*, *withPair*;++          - New option for connection (ClientId);++          - Headers for broker-specific options can be passed to connection+            (this changes the *withConnection* type signature!)++__0.0.3__ +   New interface writeAdHoc++__0.0.2__ +   Minor corrections++__0.0.1__ +   Initial release
− license/lgpl-3.0.txt
@@ -1,165 +0,0 @@-                   GNU LESSER GENERAL PUBLIC LICENSE-                       Version 3, 29 June 2007-- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>- Everyone is permitted to copy and distribute verbatim copies- of this license document, but changing it is not allowed.---  This version of the GNU Lesser General Public License incorporates-the terms and conditions of version 3 of the GNU General Public-License, supplemented by the additional permissions listed below.--  0. Additional Definitions.--  As used herein, "this License" refers to version 3 of the GNU Lesser-General Public License, and the "GNU GPL" refers to version 3 of the GNU-General Public License.--  "The Library" refers to a covered work governed by this License,-other than an Application or a Combined Work as defined below.--  An "Application" is any work that makes use of an interface provided-by the Library, but which is not otherwise based on the Library.-Defining a subclass of a class defined by the Library is deemed a mode-of using an interface provided by the Library.--  A "Combined Work" is a work produced by combining or linking an-Application with the Library.  The particular version of the Library-with which the Combined Work was made is also called the "Linked-Version".--  The "Minimal Corresponding Source" for a Combined Work means the-Corresponding Source for the Combined Work, excluding any source code-for portions of the Combined Work that, considered in isolation, are-based on the Application, and not on the Linked Version.--  The "Corresponding Application Code" for a Combined Work means the-object code and/or source code for the Application, including any data-and utility programs needed for reproducing the Combined Work from the-Application, but excluding the System Libraries of the Combined Work.--  1. Exception to Section 3 of the GNU GPL.--  You may convey a covered work under sections 3 and 4 of this License-without being bound by section 3 of the GNU GPL.--  2. Conveying Modified Versions.--  If you modify a copy of the Library, and, in your modifications, a-facility refers to a function or data to be supplied by an Application-that uses the facility (other than as an argument passed when the-facility is invoked), then you may convey a copy of the modified-version:--   a) under this License, provided that you make a good faith effort to-   ensure that, in the event an Application does not supply the-   function or data, the facility still operates, and performs-   whatever part of its purpose remains meaningful, or--   b) under the GNU GPL, with none of the additional permissions of-   this License applicable to that copy.--  3. Object Code Incorporating Material from Library Header Files.--  The object code form of an Application may incorporate material from-a header file that is part of the Library.  You may convey such object-code under terms of your choice, provided that, if the incorporated-material is not limited to numerical parameters, data structure-layouts and accessors, or small macros, inline functions and templates-(ten or fewer lines in length), you do both of the following:--   a) Give prominent notice with each copy of the object code that the-   Library is used in it and that the Library and its use are-   covered by this License.--   b) Accompany the object code with a copy of the GNU GPL and this license-   document.--  4. Combined Works.--  You may convey a Combined Work under terms of your choice that,-taken together, effectively do not restrict modification of the-portions of the Library contained in the Combined Work and reverse-engineering for debugging such modifications, if you also do each of-the following:--   a) Give prominent notice with each copy of the Combined Work that-   the Library is used in it and that the Library and its use are-   covered by this License.--   b) Accompany the Combined Work with a copy of the GNU GPL and this license-   document.--   c) For a Combined Work that displays copyright notices during-   execution, include the copyright notice for the Library among-   these notices, as well as a reference directing the user to the-   copies of the GNU GPL and this license document.--   d) Do one of the following:--       0) Convey the Minimal Corresponding Source under the terms of this-       License, and the Corresponding Application Code in a form-       suitable for, and under terms that permit, the user to-       recombine or relink the Application with a modified version of-       the Linked Version to produce a modified Combined Work, in the-       manner specified by section 6 of the GNU GPL for conveying-       Corresponding Source.--       1) Use a suitable shared library mechanism for linking with the-       Library.  A suitable mechanism is one that (a) uses at run time-       a copy of the Library already present on the user's computer-       system, and (b) will operate properly with a modified version-       of the Library that is interface-compatible with the Linked-       Version.--   e) Provide Installation Information, but only if you would otherwise-   be required to provide such information under section 6 of the-   GNU GPL, and only to the extent that such information is-   necessary to install and execute a modified version of the-   Combined Work produced by recombining or relinking the-   Application with a modified version of the Linked Version. (If-   you use option 4d0, the Installation Information must accompany-   the Minimal Corresponding Source and Corresponding Application-   Code. If you use option 4d1, you must provide the Installation-   Information in the manner specified by section 6 of the GNU GPL-   for conveying Corresponding Source.)--  5. Combined Libraries.--  You may place library facilities that are a work based on the-Library side by side in a single library together with other library-facilities that are not Applications and are not covered by this-License, and convey such a combined library under terms of your-choice, if you do both of the following:--   a) Accompany the combined library with a copy of the same work based-   on the Library, uncombined with any other library facilities,-   conveyed under the terms of this License.--   b) Give prominent notice with the combined library that part of it-   is a work based on the Library, and explaining where to find the-   accompanying uncombined form of the same work.--  6. Revised Versions of the GNU Lesser General Public License.--  The Free Software Foundation may publish revised and/or new versions-of the GNU Lesser General Public License from time to time. Such new-versions will be similar in spirit to the present version, but may-differ in detail to address new problems or concerns.--  Each version is given a distinguishing version number. If the-Library as you received it specifies that a certain numbered version-of the GNU Lesser General Public License "or any later version"-applies to it, you have the option of following the terms and-conditions either of that published version or of any later version-published by the Free Software Foundation. If the Library as you-received it does not specify a version number of the GNU Lesser-General Public License, you may choose any version of the GNU Lesser-General Public License ever published by the Free Software Foundation.--  If the Library as you received it specifies that a proxy can decide-whether future versions of the GNU Lesser General Public License shall-apply, that proxy's public statement of acceptance of any version is-permanent authorization for you to choose that version for the-Library.
+ license/lgpl-3.0ex.txt view
@@ -0,0 +1,185 @@+These library and tools were written by and are copyrighted to+    (c) copyright 2011-2015    Tobias Schoofs ++The library is licensed under the terms of the GNU Lesser+General Public Licence (LGPL), which follows below,+with the special exception ("static linking exception"):++----+As a relaxation of clause 4 of the LGPL, the copyright holder +adds a third option under 4d)++2) Link the library statically. +----++This library and toolset is distributed in the hope that it will be+useful, but WITHOUT ANY WARRANTY; without even the implied warranty+of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU+Licences for more details.+++                   GNU LESSER GENERAL PUBLIC LICENSE+                       Version 3, 29 June 2007++ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>+ Everyone is permitted to copy and distribute verbatim copies+ of this license document, but changing it is not allowed.+++  This version of the GNU Lesser General Public License incorporates+the terms and conditions of version 3 of the GNU General Public+License, supplemented by the additional permissions listed below.++  0. Additional Definitions.++  As used herein, "this License" refers to version 3 of the GNU Lesser+General Public License, and the "GNU GPL" refers to version 3 of the GNU+General Public License.++  "The Library" refers to a covered work governed by this License,+other than an Application or a Combined Work as defined below.++  An "Application" is any work that makes use of an interface provided+by the Library, but which is not otherwise based on the Library.+Defining a subclass of a class defined by the Library is deemed a mode+of using an interface provided by the Library.++  A "Combined Work" is a work produced by combining or linking an+Application with the Library.  The particular version of the Library+with which the Combined Work was made is also called the "Linked+Version".++  The "Minimal Corresponding Source" for a Combined Work means the+Corresponding Source for the Combined Work, excluding any source code+for portions of the Combined Work that, considered in isolation, are+based on the Application, and not on the Linked Version.++  The "Corresponding Application Code" for a Combined Work means the+object code and/or source code for the Application, including any data+and utility programs needed for reproducing the Combined Work from the+Application, but excluding the System Libraries of the Combined Work.++  1. Exception to Section 3 of the GNU GPL.++  You may convey a covered work under sections 3 and 4 of this License+without being bound by section 3 of the GNU GPL.++  2. Conveying Modified Versions.++  If you modify a copy of the Library, and, in your modifications, a+facility refers to a function or data to be supplied by an Application+that uses the facility (other than as an argument passed when the+facility is invoked), then you may convey a copy of the modified+version:++   a) under this License, provided that you make a good faith effort to+   ensure that, in the event an Application does not supply the+   function or data, the facility still operates, and performs+   whatever part of its purpose remains meaningful, or++   b) under the GNU GPL, with none of the additional permissions of+   this License applicable to that copy.++  3. Object Code Incorporating Material from Library Header Files.++  The object code form of an Application may incorporate material from+a header file that is part of the Library.  You may convey such object+code under terms of your choice, provided that, if the incorporated+material is not limited to numerical parameters, data structure+layouts and accessors, or small macros, inline functions and templates+(ten or fewer lines in length), you do both of the following:++   a) Give prominent notice with each copy of the object code that the+   Library is used in it and that the Library and its use are+   covered by this License.++   b) Accompany the object code with a copy of the GNU GPL and this license+   document.++  4. Combined Works.++  You may convey a Combined Work under terms of your choice that,+taken together, effectively do not restrict modification of the+portions of the Library contained in the Combined Work and reverse+engineering for debugging such modifications, if you also do each of+the following:++   a) Give prominent notice with each copy of the Combined Work that+   the Library is used in it and that the Library and its use are+   covered by this License.++   b) Accompany the Combined Work with a copy of the GNU GPL and this license+   document.++   c) For a Combined Work that displays copyright notices during+   execution, include the copyright notice for the Library among+   these notices, as well as a reference directing the user to the+   copies of the GNU GPL and this license document.++   d) Do one of the following:++       0) Convey the Minimal Corresponding Source under the terms of this+       License, and the Corresponding Application Code in a form+       suitable for, and under terms that permit, the user to+       recombine or relink the Application with a modified version of+       the Linked Version to produce a modified Combined Work, in the+       manner specified by section 6 of the GNU GPL for conveying+       Corresponding Source.++       1) Use a suitable shared library mechanism for linking with the+       Library.  A suitable mechanism is one that (a) uses at run time+       a copy of the Library already present on the user's computer+       system, and (b) will operate properly with a modified version+       of the Library that is interface-compatible with the Linked+       Version.++   e) Provide Installation Information, but only if you would otherwise+   be required to provide such information under section 6 of the+   GNU GPL, and only to the extent that such information is+   necessary to install and execute a modified version of the+   Combined Work produced by recombining or relinking the+   Application with a modified version of the Linked Version. (If+   you use option 4d0, the Installation Information must accompany+   the Minimal Corresponding Source and Corresponding Application+   Code. If you use option 4d1, you must provide the Installation+   Information in the manner specified by section 6 of the GNU GPL+   for conveying Corresponding Source.)++  5. Combined Libraries.++  You may place library facilities that are a work based on the+Library side by side in a single library together with other library+facilities that are not Applications and are not covered by this+License, and convey such a combined library under terms of your+choice, if you do both of the following:++   a) Accompany the combined library with a copy of the same work based+   on the Library, uncombined with any other library facilities,+   conveyed under the terms of this License.++   b) Give prominent notice with the combined library that part of it+   is a work based on the Library, and explaining where to find the+   accompanying uncombined form of the same work.++  6. Revised Versions of the GNU Lesser General Public License.++  The Free Software Foundation may publish revised and/or new versions+of the GNU Lesser General Public License from time to time. Such new+versions will be similar in spirit to the present version, but may+differ in detail to address new problems or concerns.++  Each version is given a distinguishing version number. If the+Library as you received it specifies that a certain numbered version+of the GNU Lesser General Public License "or any later version"+applies to it, you have the option of following the terms and+conditions either of that published version or of any later version+published by the Free Software Foundation. If the Library as you+received it does not specify a version number of the GNU Lesser+General Public License, you may choose any version of the GNU Lesser+General Public License ever published by the Free Software Foundation.++  If the Library as you received it specifies that a proxy can decide+whether future versions of the GNU Lesser General Public License shall+apply, that proxy's public statement of acceptance of any version is+permanent authorization for you to choose that version for the+Library.
stomp-queue.cabal view
@@ -1,15 +1,16 @@ Name:            stomp-queue-Version:         0.2.0+Version:         0.2.1 Cabal-Version:   >= 1.8 Copyright:       Copyright (c) Tobias Schoofs, 2011 - 2015 License:         LGPL-license-file:    license/lgpl-3.0.txt+license-file:    license/lgpl-3.0ex.txt Author:          Tobias Schoofs Maintainer:      tobias dot schoofs at gmx dot net Homepage:        http://github.com/toschoo/mom Category:        Network, Message-oriented Middleware, Stomp, Client Build-Type:      Simple Synopsis:        Stompl Client Library +extra-source-files: changelog.md Description:   The Stomp Protocol specifies message-oriented interoperability.   Applications connect to a message broker to send (publish)@@ -33,148 +34,6 @@   on <http://github.com/toschoo/mom>.   The Stomp specification can be found at   <http://stomp.github.com>.--  .--  Release History:--  .--  [0.2.0] Changes:--          .--          - Low-level sockets were replaced by network-conduit-tls-            (Be aware that this change might introduce some-             subtle changes in behaviour concerning in particular -             performance and connection handling)--          .--          - OMaxRecv not used anymore--          .--          - New Option OTLS for TLS connections--          .--          - New Option OTmo to specify a connection timeout--  .--  [0.1.4] Changes:--          . --          - New: destroyReader and destroyWriter-  -          .--          - Patterns deprecated--  .--  [0.1.3] New Option for newWriter 'ONoContentLen'--  .--  [0.1.2] Minor changes:--          .--          - Dependency for stompl-0.1.1--          .--          - Some more enquiries into potential mem leaks,-            but more to follow--  .--  [0.1.1] Dependency for bytestring 0.10--  .--  [0.1.0] Major changes:--          .--          - Compliance with Stomp 1.2:--          .--          - There are major changes in the frame format,-            please refer to the documentation of the -            stompl package, version 0.1.0, there are important changes-            that may impact messages for older versions!--          .--          - When generating an Ack frame,-            the /id/ header is by default taken from the /ack/ header-            in the corresponding Message frame.-            Should there be no /ack/ header or if its value is empty,-            the value of the header /message-id/ is taken.-            This behaviour complies with 1.2 -            for brokers supporting this version,-            but also continues to work with 1.1 brokers.--          .--          - It is now possible to send a Stomp frame-            to connect to a broker (the broker, of course,-            has to accept Stomp frames and process them correctly).-            There is a new Copt (/OStomp/) to support this feature.--  .--  [0.0.8] Client/Server on top of Queues.--  .--  [0.0.7] Fighting with hackagedb...--  .--  [0.0.6] Heartbeats caused a memory leak by creating -          many Connection instances in the connection state list.-          The connections were lazily deleted, /i.e./ were-          not deleted at all.-          Connection state is now cleaned up by a strict delete.--  .--  [0.0.5] Major changes:- -          .--          - Underscore functions (/withConnection_/) removed; --          .--          - New /with*/ functions: /withWriter/, /withPair/;--          .--          - New option for connection (ClientId);--          .--          - Headers for broker-specific options can be passed to connection-            (this changes the /withConnection/ type signature!)--  .--  [0.0.3] New interface writeAdHoc--  .--  [0.0.2] Minor corrections-          -  .--  [0.0.1] Initial release   Library