http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/go/src/qpid.apache.org/proton/handlers.go ---------------------------------------------------------------------- diff --git a/proton-c/bindings/go/src/qpid.apache.org/proton/handlers.go b/proton-c/bindings/go/src/qpid.apache.org/proton/handlers.go deleted file mode 100644 index 961136e..0000000 --- a/proton-c/bindings/go/src/qpid.apache.org/proton/handlers.go +++ /dev/null @@ -1,395 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. -*/ - -package proton - -import "fmt" - -// EventHandler handles core proton events. -type EventHandler interface { - // HandleEvent is called with an event. - // Typically HandleEvent() is implemented as a switch on e.Type() - // Returning an error will stop the Engine. - HandleEvent(e Event) -} - -// MessagingHandler provides an alternative interface to EventHandler. -// it is easier to use for most applications that send and receive messages. -// -// Implement this interface and then wrap your value with a MessagingHandlerDelegator. -// MessagingHandlerDelegator implements EventHandler and can be registered with a Engine. -// -type MessagingHandler interface { - // HandleMessagingEvent is called with MessagingEvent. - // Typically HandleEvent() is implemented as a switch on e.Type() - // Returning an error will stop the Engine. - HandleMessagingEvent(MessagingEvent, Event) -} - -// MessagingEvent provides a set of events that are easier to work with than the -// core events defined by EventType -// -// There are 3 types of "endpoint": Connection, Session and Link. For each -// endpoint there are 5 events: Opening, Opened, Closing, Closed and Error. -// -// The meaning of these events is as follows: -// -// Opening: The remote end opened, the local end will open automatically. -// -// Opened: Both ends are open, regardless of which end opened first. -// -// Closing: The remote end closed without error, the local end will close automatically. -// -// Error: The remote end closed with an error, the local end will close automatically. -// -// Closed: Both ends are closed, regardless of which end closed first or if there was an error. -// No further events will be received for the endpoint. -// -type MessagingEvent int - -const ( - // The event loop starts. - MStart MessagingEvent = iota - // The peer closes the connection with an error condition. - MConnectionError - // The peer closes the session with an error condition. - MSessionError - // The peer closes the link with an error condition. - MLinkError - // The peer Initiates the opening of the connection. - MConnectionOpening - // The peer initiates the opening of the session. - MSessionOpening - // The peer initiates the opening of the link. - MLinkOpening - // The connection is opened. - MConnectionOpened - // The session is opened. - MSessionOpened - // The link is opened. - MLinkOpened - // The peer initiates the closing of the connection. - MConnectionClosing - // The peer initiates the closing of the session. - MSessionClosing - // The peer initiates the closing of the link. - MLinkClosing - // Both ends of the connection are closed. - MConnectionClosed - // Both ends of the session are closed. - MSessionClosed - // Both ends of the link are closed. - MLinkClosed - // The sender link has credit and messages can - // therefore be transferred. - MSendable - // The remote peer accepts an outgoing message. - MAccepted - // The remote peer rejects an outgoing message. - MRejected - // The peer releases an outgoing message. Note that this may be in response to - // either the RELEASE or MODIFIED state as defined by the AMQP specification. - MReleased - // The peer has settled the outgoing message. This is the point at which it - // should never be re-transmitted. - MSettled - // A message is received. Call Event.Delivery().Message() to decode as an amqp.Message. - // To manage the outcome of this messages (e.g. to accept or reject the message) - // use Event.Delivery(). - MMessage - // A network connection was disconnected. - MDisconnected -) - -func (t MessagingEvent) String() string { - switch t { - case MStart: - return "Start" - case MConnectionError: - return "ConnectionError" - case MSessionError: - return "SessionError" - case MLinkError: - return "LinkError" - case MConnectionOpening: - return "ConnectionOpening" - case MSessionOpening: - return "SessionOpening" - case MLinkOpening: - return "LinkOpening" - case MConnectionOpened: - return "ConnectionOpened" - case MSessionOpened: - return "SessionOpened" - case MLinkOpened: - return "LinkOpened" - case MConnectionClosing: - return "ConnectionClosing" - case MSessionClosing: - return "SessionClosing" - case MLinkClosing: - return "LinkClosing" - case MConnectionClosed: - return "ConnectionClosed" - case MSessionClosed: - return "SessionClosed" - case MLinkClosed: - return "LinkClosed" - case MDisconnected: - return "Disconnected" - case MSendable: - return "Sendable" - case MAccepted: - return "Accepted" - case MRejected: - return "Rejected" - case MReleased: - return "Released" - case MSettled: - return "Settled" - case MMessage: - return "Message" - default: - return "Unknown" - } -} - -// ResourceHandler provides a simple way to track the creation and deletion of -// various proton objects. -// endpointDelegator captures common patterns for endpoints opening/closing -type endpointDelegator struct { - remoteOpen, remoteClose, localOpen, localClose EventType - opening, opened, closing, closed, error MessagingEvent - endpoint func(Event) Endpoint - delegator *MessagingAdapter -} - -// HandleEvent handles an open/close event for an endpoint in a generic way. -func (d endpointDelegator) HandleEvent(e Event) { - endpoint := d.endpoint(e) - state := endpoint.State() - - switch e.Type() { - - case d.localOpen: - if state.RemoteActive() { - d.delegator.mhandler.HandleMessagingEvent(d.opened, e) - } - - case d.remoteOpen: - d.delegator.mhandler.HandleMessagingEvent(d.opening, e) - switch { - case state.LocalActive(): - d.delegator.mhandler.HandleMessagingEvent(d.opened, e) - case state.LocalUninit(): - if d.delegator.AutoOpen { - endpoint.Open() - } - } - - case d.remoteClose: - if endpoint.RemoteCondition().IsSet() { // Closed with error - d.delegator.mhandler.HandleMessagingEvent(d.error, e) - } else { - d.delegator.mhandler.HandleMessagingEvent(d.closing, e) - } - if state.LocalClosed() { - d.delegator.mhandler.HandleMessagingEvent(d.closed, e) - } else if state.LocalActive() { - endpoint.Close() - } - - case d.localClose: - if state.RemoteClosed() { - d.delegator.mhandler.HandleMessagingEvent(d.closed, e) - } - - default: - // We shouldn't be called with any other event type. - panic(fmt.Errorf("internal error, not an open/close event: %s", e)) - } -} - -type flowcontroller struct { - window, drained int -} - -func (d flowcontroller) HandleEvent(e Event) { - link := e.Link() - - switch e.Type() { - case ELinkLocalOpen, ELinkRemoteOpen, ELinkFlow, EDelivery: - if link.IsReceiver() { - d.drained += link.Drained() - if d.drained != 0 { - link.Flow(d.window - link.Credit()) - } - } - } -} - -// MessagingAdapter implments a EventHandler and delegates to a MessagingHandler. -// You can modify the exported fields before you pass the MessagingAdapter to -// a Engine. -type MessagingAdapter struct { - mhandler MessagingHandler - connection, session, link endpointDelegator - flowcontroller EventHandler - - // AutoSettle (default true) automatically pre-settle outgoing messages. - AutoSettle bool - // AutoAccept (default true) automatically accept and settle incoming messages - // if they are not settled by the delegate. - AutoAccept bool - // AutoOpen (default true) automatically open remotely opened endpoints. - AutoOpen bool - // Prefetch (default 10) initial credit to issue for incoming links. - Prefetch int - // PeerCloseIsError (default false) if true a close by the peer will be treated as an error. - PeerCloseError bool -} - -func NewMessagingAdapter(h MessagingHandler) *MessagingAdapter { - return &MessagingAdapter{ - mhandler: h, - flowcontroller: nil, - AutoSettle: true, - AutoAccept: true, - AutoOpen: true, - Prefetch: 10, - PeerCloseError: false, - } -} - -func handleIf(h EventHandler, e Event) { - if h != nil { - h.HandleEvent(e) - } -} - -// Handle a proton event by passing the corresponding MessagingEvent(s) to -// the MessagingHandler. -func (d *MessagingAdapter) HandleEvent(e Event) { - handleIf(d.flowcontroller, e) - - switch e.Type() { - - case EConnectionInit: - d.connection = endpointDelegator{ - EConnectionRemoteOpen, EConnectionRemoteClose, EConnectionLocalOpen, EConnectionLocalClose, - MConnectionOpening, MConnectionOpened, MConnectionClosing, MConnectionClosed, - MConnectionError, - func(e Event) Endpoint { return e.Connection() }, - d, - } - d.session = endpointDelegator{ - ESessionRemoteOpen, ESessionRemoteClose, ESessionLocalOpen, ESessionLocalClose, - MSessionOpening, MSessionOpened, MSessionClosing, MSessionClosed, - MSessionError, - func(e Event) Endpoint { return e.Session() }, - d, - } - d.link = endpointDelegator{ - ELinkRemoteOpen, ELinkRemoteClose, ELinkLocalOpen, ELinkLocalClose, - MLinkOpening, MLinkOpened, MLinkClosing, MLinkClosed, - MLinkError, - func(e Event) Endpoint { return e.Link() }, - d, - } - if d.Prefetch > 0 { - d.flowcontroller = flowcontroller{window: d.Prefetch, drained: 0} - } - d.mhandler.HandleMessagingEvent(MStart, e) - - case EConnectionRemoteOpen: - - d.connection.HandleEvent(e) - - case EConnectionRemoteClose: - d.connection.HandleEvent(e) - e.Connection().Transport().CloseTail() - - case EConnectionLocalOpen, EConnectionLocalClose: - d.connection.HandleEvent(e) - - case ESessionRemoteOpen, ESessionRemoteClose, ESessionLocalOpen, ESessionLocalClose: - d.session.HandleEvent(e) - - case ELinkRemoteOpen: - e.Link().Source().Copy(e.Link().RemoteSource()) - e.Link().Target().Copy(e.Link().RemoteTarget()) - d.link.HandleEvent(e) - - case ELinkRemoteClose, ELinkLocalOpen, ELinkLocalClose: - d.link.HandleEvent(e) - - case ELinkFlow: - if e.Link().IsSender() && e.Link().Credit() > 0 { - d.mhandler.HandleMessagingEvent(MSendable, e) - } - - case EDelivery: - if e.Delivery().Link().IsReceiver() { - d.incoming(e) - } else { - d.outgoing(e) - } - - case ETransportClosed: - d.mhandler.HandleMessagingEvent(MDisconnected, e) - } -} - -func (d *MessagingAdapter) incoming(e Event) { - delivery := e.Delivery() - if delivery.HasMessage() { - d.mhandler.HandleMessagingEvent(MMessage, e) - if d.AutoAccept && !delivery.Settled() { - delivery.Accept() - } - if delivery.Current() { - e.Link().Advance() - } - } else if delivery.Updated() && delivery.Settled() { - d.mhandler.HandleMessagingEvent(MSettled, e) - } - return -} - -func (d *MessagingAdapter) outgoing(e Event) { - delivery := e.Delivery() - if delivery.Updated() { - switch delivery.Remote().Type() { - case Accepted: - d.mhandler.HandleMessagingEvent(MAccepted, e) - case Rejected: - d.mhandler.HandleMessagingEvent(MRejected, e) - case Released, Modified: - d.mhandler.HandleMessagingEvent(MReleased, e) - } - if delivery.Settled() { - // The delivery was settled remotely, inform the local end. - d.mhandler.HandleMessagingEvent(MSettled, e) - } - if d.AutoSettle { - delivery.Settle() // Local settle, don't mhandler MSettled till the remote end settles. - } - } - return -}
http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/go/src/qpid.apache.org/proton/message.go ---------------------------------------------------------------------- diff --git a/proton-c/bindings/go/src/qpid.apache.org/proton/message.go b/proton-c/bindings/go/src/qpid.apache.org/proton/message.go deleted file mode 100644 index 2336483..0000000 --- a/proton-c/bindings/go/src/qpid.apache.org/proton/message.go +++ /dev/null @@ -1,93 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. -*/ - -package proton - -// #include <proton/types.h> -// #include <proton/message.h> -// #include <proton/codec.h> -import "C" - -import ( - "fmt" - "qpid.apache.org/amqp" - "strconv" - "sync/atomic" -) - -// HasMessage is true if all message data is available. -// Equivalent to !d.isNil && d.Readable() && !d.Partial() -func (d Delivery) HasMessage() bool { return !d.IsNil() && d.Readable() && !d.Partial() } - -// Message decodes the message containined in a delivery. -// -// Must be called in the correct link context with this delivery as the current message, -// handling an MMessage event is always a safe context to call this function. -// -// Will return an error if message is incomplete or not current. -func (delivery Delivery) Message() (m amqp.Message, err error) { - if !delivery.Readable() { - return nil, fmt.Errorf("delivery is not readable") - } - if delivery.Partial() { - return nil, fmt.Errorf("delivery has partial message") - } - data := make([]byte, delivery.Pending()) - result := delivery.Link().Recv(data) - if result != len(data) { - return nil, fmt.Errorf("cannot receive message: %s", PnErrorCode(result)) - } - m = amqp.NewMessage() - err = m.Decode(data) - return -} - -// Process-wide atomic counter for generating tag names -var tagCounter uint64 - -func nextTag() string { - return strconv.FormatUint(atomic.AddUint64(&tagCounter, 1), 32) -} - -// Send sends a amqp.Message over a Link. -// Returns a Delivery that can be use to determine the outcome of the message. -func (link Link) Send(m amqp.Message) (Delivery, error) { - if !link.IsSender() { - return Delivery{}, fmt.Errorf("attempt to send message on receiving link") - } - - delivery := link.Delivery(nextTag()) - bytes, err := m.Encode(nil) - if err != nil { - return Delivery{}, fmt.Errorf("cannot send mesage %s", err) - } - result := link.SendBytes(bytes) - link.Advance() - if result != len(bytes) { - if result < 0 { - return delivery, fmt.Errorf("send failed %v", PnErrorCode(result)) - } else { - return delivery, fmt.Errorf("send incomplete %v of %v", result, len(bytes)) - } - } - if link.RemoteSndSettleMode() == SndSettled { - delivery.Settle() - } - return delivery, nil -} http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/go/src/qpid.apache.org/proton/proton_test.go ---------------------------------------------------------------------- diff --git a/proton-c/bindings/go/src/qpid.apache.org/proton/proton_test.go b/proton-c/bindings/go/src/qpid.apache.org/proton/proton_test.go deleted file mode 100644 index aad93eb..0000000 --- a/proton-c/bindings/go/src/qpid.apache.org/proton/proton_test.go +++ /dev/null @@ -1,96 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. -*/ - -package proton - -import ( - "fmt" - "net" - "path" - "runtime" - "testing" - "time" -) - -func errorIf(t *testing.T, err error) { - if err != nil { - _, file, line, ok := runtime.Caller(1) // annotate with location of caller. - if ok { - _, file = path.Split(file) - } - t.Errorf("(from %s:%d) %v", file, line, err) - } -} - -func fatalIf(t *testing.T, err error) { - if err != nil { - _, file, line, ok := runtime.Caller(1) // annotate with location of caller. - if ok { - _, file = path.Split(file) - } - t.Fatalf("(from %s:%d) %v", file, line, err) - } -} - -type events []EventType - -type testEngine struct { - Engine - events chan EventType -} - -func newTestEngine(conn net.Conn) (*testEngine, error) { - testEng := &testEngine{events: make(chan EventType, 1000)} - return testEng, testEng.Initialize(conn, testEng) -} - -func (eng *testEngine) HandleEvent(e Event) { - eng.events <- e.Type() -} - -func (eng *testEngine) expect(events []EventType) error { - timer := time.After(5 * time.Second) - for _, want := range events { - select { - case got := <-eng.events: - if want != got { - return fmt.Errorf("want %s, got %s", want, got) - } - case <-timer: - return fmt.Errorf("expect timeout") - } - } - return nil -} - -func Test(t *testing.T) { - cConn, sConn := net.Pipe() - client, err := newTestEngine(cConn) - fatalIf(t, err) - server, err := newTestEngine(sConn) - fatalIf(t, err) - server.Server() - go client.Run() - go server.Run() - fatalIf(t, server.expect(events{EConnectionInit, EConnectionBound})) - fatalIf(t, client.expect(events{EConnectionInit, EConnectionBound})) - fatalIf(t, client.InjectWait(func() error { client.Connection().Open(); return nil })) - fatalIf(t, client.expect(events{EConnectionLocalOpen})) - fatalIf(t, server.expect(events{EConnectionRemoteOpen})) -} http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/go/src/qpid.apache.org/proton/uuid.go ---------------------------------------------------------------------- diff --git a/proton-c/bindings/go/src/qpid.apache.org/proton/uuid.go b/proton-c/bindings/go/src/qpid.apache.org/proton/uuid.go deleted file mode 100644 index f2dc70e..0000000 --- a/proton-c/bindings/go/src/qpid.apache.org/proton/uuid.go +++ /dev/null @@ -1,57 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. -*/ - -package proton - -import ( - "fmt" - "math/rand" - "sync" - "time" -) - -// UUID is a 16-byte Universally Unique Identifier -type UUID [16]byte - -// String gives a UUID in standard string format. -func (u UUID) String() string { - return fmt.Sprintf("%X-%X-%X-%X-%X", u[0:4], u[4:6], u[6:8], u[8:10], u[10:]) -} - -// Don't mess with the default random source. -var randomSource = rand.NewSource(time.Now().UnixNano()) -var randomLock sync.Mutex - -func random() byte { - randomLock.Lock() - defer randomLock.Unlock() - return byte(randomSource.Int63()) -} - -// UUID4 returns a randomly-generated (version 4) UUID, as per RFC4122 -func UUID4() UUID { - var u UUID - for i := 0; i < len(u); i++ { - u[i] = random() - } - // See /https://tools.ietf.org/html/rfc4122#section-4.4 - u[6] = (u[6] & 0x0F) | 0x40 // Version bits to 4 - u[8] = (u[8] & 0x3F) | 0x80 // Reserved bits (top two) set to 01 - return u -} http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/go/src/qpid.apache.org/proton/wrappers.go ---------------------------------------------------------------------- diff --git a/proton-c/bindings/go/src/qpid.apache.org/proton/wrappers.go b/proton-c/bindings/go/src/qpid.apache.org/proton/wrappers.go deleted file mode 100644 index 4d55e4f..0000000 --- a/proton-c/bindings/go/src/qpid.apache.org/proton/wrappers.go +++ /dev/null @@ -1,431 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. -*/ - -// This file contains special-case wrapper functions or wrappers that don't follow -// the pattern of genwrap.go. - -package proton - -//#include <proton/codec.h> -//#include <proton/connection.h> -//#include <proton/delivery.h> -//#include <proton/event.h> -//#include <proton/link.h> -//#include <proton/link.h> -//#include <proton/object.h> -//#include <proton/sasl.h> -//#include <proton/session.h> -//#include <proton/transport.h> -//#include <stdlib.h> -import "C" - -import ( - "fmt" - "qpid.apache.org/amqp" - "reflect" - "time" - "unsafe" -) - -// TODO aconway 2015-05-05: Documentation for generated types. - -// CHandle holds an unsafe.Pointer to a proton C struct, the C type depends on the -// Go type implementing this interface. For low level, at-your-own-risk use only. -type CHandle interface { - // CPtr returns the unsafe C pointer, equivalent to a C void*. - CPtr() unsafe.Pointer -} - -// Incref increases the refcount of a proton value, which prevents the -// underlying C struct being freed until you call Decref(). -// -// It can be useful to "pin" a proton value in memory while it is in use by -// goroutines other than the event loop goroutine. For example if you Incref() a -// Link, the underlying object is not freed when the link is closed, so means -// other goroutines can continue to safely use it as an index in a map or inject -// it into the event loop goroutine. There will of course be an error if you try -// to use a link after it is closed, but not a segmentation fault. -func Incref(c CHandle) { - if p := c.CPtr(); p != nil { - C.pn_incref(p) - } -} - -// Decref decreases the refcount of a proton value, freeing the underlying C -// struct if this is the last reference. Only call this if you previously -// called Incref() for this value. -func Decref(c CHandle) { - if p := c.CPtr(); p != nil { - C.pn_decref(p) - } -} - -// Event is an AMQP protocol event. -type Event struct { - pn *C.pn_event_t - eventType EventType - connection Connection - transport Transport - session Session - link Link - delivery Delivery - injecter Injecter -} - -func makeEvent(pn *C.pn_event_t, injecter Injecter) Event { - return Event{ - pn: pn, - eventType: EventType(C.pn_event_type(pn)), - connection: Connection{C.pn_event_connection(pn)}, - transport: Transport{C.pn_event_transport(pn)}, - session: Session{C.pn_event_session(pn)}, - link: Link{C.pn_event_link(pn)}, - delivery: Delivery{C.pn_event_delivery(pn)}, - injecter: injecter, - } -} -func (e Event) IsNil() bool { return e.eventType == EventType(0) } -func (e Event) Type() EventType { return e.eventType } -func (e Event) Connection() Connection { return e.connection } -func (e Event) Transport() Transport { return e.transport } -func (e Event) Session() Session { return e.session } -func (e Event) Link() Link { return e.link } -func (e Event) Delivery() Delivery { return e.delivery } -func (e Event) String() string { return e.Type().String() } - -// Injecter should not be used in a handler function, but it can be passed to -// other goroutines (via a channel or to a goroutine started by handler -// functions) to let them inject functions back into the handlers goroutine. -func (e Event) Injecter() Injecter { return e.injecter } - -// Data holds a pointer to decoded AMQP data. -// Use amqp.marshal/unmarshal to access it as Go data types. -// -type Data struct{ pn *C.pn_data_t } - -func NewData(p unsafe.Pointer) Data { return Data{(*C.pn_data_t)(p)} } - -func (d Data) Free() { C.pn_data_free(d.pn) } -func (d Data) Pointer() unsafe.Pointer { return unsafe.Pointer(d.pn) } -func (d Data) Clear() { C.pn_data_clear(d.pn) } -func (d Data) Rewind() { C.pn_data_rewind(d.pn) } -func (d Data) Error() error { return PnError(C.pn_data_error(d.pn)) } - -// State holds the state flags for an AMQP endpoint. -type State byte - -const ( - SLocalUninit State = C.PN_LOCAL_UNINIT - SLocalActive = C.PN_LOCAL_ACTIVE - SLocalClosed = C.PN_LOCAL_CLOSED - SRemoteUninit = C.PN_REMOTE_UNINIT - SRemoteActive = C.PN_REMOTE_ACTIVE - SRemoteClosed = C.PN_REMOTE_CLOSED -) - -// Has is True if bits & state is non 0. -func (s State) Has(bits State) bool { return s&bits != 0 } - -func (s State) LocalUninit() bool { return s.Has(SLocalUninit) } -func (s State) LocalActive() bool { return s.Has(SLocalActive) } -func (s State) LocalClosed() bool { return s.Has(SLocalClosed) } -func (s State) RemoteUninit() bool { return s.Has(SRemoteUninit) } -func (s State) RemoteActive() bool { return s.Has(SRemoteActive) } -func (s State) RemoteClosed() bool { return s.Has(SRemoteClosed) } - -// Return a State containig just the local flags -func (s State) Local() State { return State(s & C.PN_LOCAL_MASK) } - -// Return a State containig just the remote flags -func (s State) Remote() State { return State(s & C.PN_REMOTE_MASK) } - -// Endpoint is the common interface for Connection, Link and Session. -type Endpoint interface { - // State is the open/closed state. - State() State - // Open an endpoint. - Open() - // Close an endpoint. - Close() - // Condition holds a local error condition. - Condition() Condition - // RemoteCondition holds a remote error condition. - RemoteCondition() Condition - // Human readable name - String() string - // Human readable endpoint type "link", "session" etc. - Type() string -} - -// CloseError sets an error condition (if err != nil) on an endpoint and closes -// the endpoint if not already closed -func CloseError(e Endpoint, err error) { - if err != nil { - e.Condition().SetError(err) - } - e.Close() -} - -// EndpointError returns the remote error if there is one, the local error if not -// nil if there is no error. -func EndpointError(e Endpoint) error { - err := e.RemoteCondition().Error() - if err == nil { - err = e.Condition().Error() - } - return err -} - -const ( - Received uint64 = C.PN_RECEIVED - Accepted = C.PN_ACCEPTED - Rejected = C.PN_REJECTED - Released = C.PN_RELEASED - Modified = C.PN_MODIFIED -) - -// SettleAs is equivalent to d.Update(disposition); d.Settle() -func (d Delivery) SettleAs(disposition uint64) { - d.Update(disposition) - d.Settle() -} - -// Accept accepts and settles a delivery. -func (d Delivery) Accept() { d.SettleAs(Accepted) } - -// Reject rejects and settles a delivery -func (d Delivery) Reject() { d.SettleAs(Rejected) } - -// Release releases and settles a delivery -// If delivered is true the delivery count for the message will be increased. -func (d Delivery) Release(delivered bool) { - if delivered { - d.SettleAs(Modified) - } else { - d.SettleAs(Released) - } -} - -type DeliveryTag struct{ pn C.pn_delivery_tag_t } - -func (t DeliveryTag) String() string { return C.GoStringN(t.pn.start, C.int(t.pn.size)) } - -func (l Link) Recv(buf []byte) int { - if len(buf) == 0 { - return 0 - } - return int(C.pn_link_recv(l.pn, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)))) -} - -func (l Link) SendBytes(bytes []byte) int { - return int(C.pn_link_send(l.pn, cPtr(bytes), cLen(bytes))) -} - -func pnTag(tag string) C.pn_delivery_tag_t { - bytes := []byte(tag) - return C.pn_dtag(cPtr(bytes), cLen(bytes)) -} - -func (l Link) Delivery(tag string) Delivery { - return Delivery{C.pn_delivery(l.pn, pnTag(tag))} -} - -func (l Link) Connection() Connection { return l.Session().Connection() } - -// Human-readable link description including name, source, target and direction. -func (l Link) String() string { - switch { - case l.IsNil(): - return fmt.Sprintf("<nil-link>") - case l.IsSender(): - return fmt.Sprintf("%s(%s->%s)", l.Name(), l.Source().Address(), l.Target().Address()) - default: - return fmt.Sprintf("%s(%s<-%s)", l.Name(), l.Target().Address(), l.Source().Address()) - } -} - -func (l Link) Type() string { - if l.IsSender() { - return "link(sender)" - } else { - return "link(receiver)" - } -} - -// IsDrain calls pn_link_get_drain(), it conflicts with pn_link_drain() under the normal mapping. -func (l Link) IsDrain() bool { - return bool(C.pn_link_get_drain(l.pn)) -} - -func cPtr(b []byte) *C.char { - if len(b) == 0 { - return nil - } - return (*C.char)(unsafe.Pointer(&b[0])) -} - -func cLen(b []byte) C.size_t { - return C.size_t(len(b)) -} - -func (s Session) Sender(name string) Link { - cname := C.CString(name) - defer C.free(unsafe.Pointer(cname)) - return Link{C.pn_sender(s.pn, cname)} -} - -func (s Session) Receiver(name string) Link { - cname := C.CString(name) - defer C.free(unsafe.Pointer(cname)) - return Link{C.pn_receiver(s.pn, cname)} -} - -func (t Transport) String() string { - return fmt.Sprintf("(Transport)(%p)", t.CPtr()) -} - -// Unique (per process) string identifier for a connection, useful for debugging. -func (c Connection) String() string { - // Use the transport address to match the default transport logs from PN_TRACE. - return fmt.Sprintf("(Connection)(%p)", c.Transport().CPtr()) -} - -func (c Connection) Type() string { - return "connection" -} - -// Head functions don't follow the normal naming conventions so missed by the generator. - -func (c Connection) LinkHead(s State) Link { - return Link{C.pn_link_head(c.pn, C.pn_state_t(s))} -} - -func (c Connection) SessionHead(s State) Session { - return Session{C.pn_session_head(c.pn, C.pn_state_t(s))} -} - -func (c Connection) Links(state State) (links []Link) { - for l := c.LinkHead(state); !l.IsNil(); l = l.Next(state) { - links = append(links, l) - } - return -} - -func (c Connection) Sessions(state State) (sessions []Session) { - for s := c.SessionHead(state); !s.IsNil(); s = s.Next(state) { - sessions = append(sessions, s) - } - return -} - -// SetPassword takes []byte not string because it is impossible to erase a string -// from memory reliably. Proton will not keep the password in memory longer than -// needed, the caller should overwrite their copy on return. -// -// The password must not contain embedded nul characters, a trailing nul is ignored. -func (c Connection) SetPassword(password []byte) { - if len(password) == 0 || password[len(password)-1] != 0 { - password = append(password, 0) // Proton requires a terminating null. - } - C.pn_connection_set_password(c.pn, (*C.char)(unsafe.Pointer(&password[0]))) -} - -func (s Session) String() string { - return fmt.Sprintf("(Session)(%p)", s.pn) // TODO aconway 2016-09-12: should print channel number. -} - -func (s Session) Type() string { return "session" } - -// Error returns an instance of amqp.Error or nil. -func (c Condition) Error() error { - if c.IsNil() || !c.IsSet() { - return nil - } - return amqp.Error{Name: c.Name(), Description: c.Description()} -} - -// Set a Go error into a condition. -// If it is not an amqp.Condition use the error type as name, error string as description. -func (c Condition) SetError(err error) { - if err != nil { - if cond, ok := err.(amqp.Error); ok { - c.SetName(cond.Name) - c.SetDescription(cond.Description) - } else { - c.SetName(reflect.TypeOf(err).Name()) - c.SetDescription(err.Error()) - } - } -} - -func (c Connection) Session() (Session, error) { - s := Session{C.pn_session(c.pn)} - if s.IsNil() { - return s, Connection(c).Error() - } - return s, nil -} - -// pnTime converts Go time.Time to Proton millisecond Unix time. -// -// Note: t.isZero() is converted to C.pn_timestamp_t(0) and vice-versa. These -// are used as "not set" sentinel values by the Go and Proton APIs, so it is -// better to conserve the "zeroness" even though they don't represent the same -// time instant. -// -func pnTime(t time.Time) (pnt C.pn_timestamp_t) { - if !t.IsZero() { - pnt = C.pn_timestamp_t(t.Unix()*1000 + int64(t.Nanosecond())/int64(time.Millisecond)) - } - return -} - -// goTime converts a pn_timestamp_t to a Go time.Time. -// -// Note: C.pn_timestamp_t(0) is converted to a zero time.Time and -// vice-versa. These are used as "not set" sentinel values by the Go and Proton -// APIs, so it is better to conserve the "zeroness" even though they don't -// represent the same time instant. -// -func goTime(pnt C.pn_timestamp_t) (t time.Time) { - if pnt != 0 { - t = time.Unix(int64(pnt/1000), int64(pnt%1000)*int64(time.Millisecond)) - } - return -} - -// Special treatment for Transport.Head, return value is unsafe.Pointer not string -func (t Transport) Head() unsafe.Pointer { - return unsafe.Pointer(C.pn_transport_head(t.pn)) -} - -// Special treatment for Transport.Tail, return value is unsafe.Pointer not string -func (t Transport) Tail() unsafe.Pointer { - return unsafe.Pointer(C.pn_transport_tail(t.pn)) -} - -// Special treatment for Transport.Push, takes []byte instead of char*, size -func (t Transport) Push(bytes []byte) int { - return int(C.pn_transport_push(t.pn, (*C.char)(unsafe.Pointer(&bytes[0])), C.size_t(len(bytes)))) -} - -// Get the SASL object for the transport. -func (t Transport) SASL() SASL { - return SASL{C.pn_sasl(t.pn)} -} http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/go/src/qpid.apache.org/proton/wrappers_gen.go ---------------------------------------------------------------------- diff --git a/proton-c/bindings/go/src/qpid.apache.org/proton/wrappers_gen.go b/proton-c/bindings/go/src/qpid.apache.org/proton/wrappers_gen.go deleted file mode 100644 index 19bfde2..0000000 --- a/proton-c/bindings/go/src/qpid.apache.org/proton/wrappers_gen.go +++ /dev/null @@ -1,937 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. -*/ - -// -// NOTE: DO NOT EDIT. This file was generated by genwrap.go from the proton header files. -// Update the generator and re-run if you need to modify this code. -// - -package proton - -import ( - "time" - "unsafe" -) - -// #include <proton/types.h> -// #include <proton/error.h> -// #include <proton/condition.h> -// #include <proton/event.h> -// #include <stdlib.h> -// #include <proton/session.h> -// #include <proton/link.h> -// #include <proton/delivery.h> -// #include <proton/disposition.h> -// #include <proton/condition.h> -// #include <proton/terminus.h> -// #include <proton/connection.h> -// #include <proton/transport.h> -// #include <proton/sasl.h> -import "C" - -type EventType int - -const ( - EConnectionInit EventType = C.PN_CONNECTION_INIT - EConnectionBound EventType = C.PN_CONNECTION_BOUND - EConnectionUnbound EventType = C.PN_CONNECTION_UNBOUND - EConnectionLocalOpen EventType = C.PN_CONNECTION_LOCAL_OPEN - EConnectionRemoteOpen EventType = C.PN_CONNECTION_REMOTE_OPEN - EConnectionLocalClose EventType = C.PN_CONNECTION_LOCAL_CLOSE - EConnectionRemoteClose EventType = C.PN_CONNECTION_REMOTE_CLOSE - EConnectionFinal EventType = C.PN_CONNECTION_FINAL - ESessionInit EventType = C.PN_SESSION_INIT - ESessionLocalOpen EventType = C.PN_SESSION_LOCAL_OPEN - ESessionRemoteOpen EventType = C.PN_SESSION_REMOTE_OPEN - ESessionLocalClose EventType = C.PN_SESSION_LOCAL_CLOSE - ESessionRemoteClose EventType = C.PN_SESSION_REMOTE_CLOSE - ESessionFinal EventType = C.PN_SESSION_FINAL - ELinkInit EventType = C.PN_LINK_INIT - ELinkLocalOpen EventType = C.PN_LINK_LOCAL_OPEN - ELinkRemoteOpen EventType = C.PN_LINK_REMOTE_OPEN - ELinkLocalClose EventType = C.PN_LINK_LOCAL_CLOSE - ELinkRemoteClose EventType = C.PN_LINK_REMOTE_CLOSE - ELinkLocalDetach EventType = C.PN_LINK_LOCAL_DETACH - ELinkRemoteDetach EventType = C.PN_LINK_REMOTE_DETACH - ELinkFlow EventType = C.PN_LINK_FLOW - ELinkFinal EventType = C.PN_LINK_FINAL - EDelivery EventType = C.PN_DELIVERY - ETransport EventType = C.PN_TRANSPORT - ETransportAuthenticated EventType = C.PN_TRANSPORT_AUTHENTICATED - ETransportError EventType = C.PN_TRANSPORT_ERROR - ETransportHeadClosed EventType = C.PN_TRANSPORT_HEAD_CLOSED - ETransportTailClosed EventType = C.PN_TRANSPORT_TAIL_CLOSED - ETransportClosed EventType = C.PN_TRANSPORT_CLOSED -) - -func (e EventType) String() string { - switch e { - - case C.PN_CONNECTION_INIT: - return "ConnectionInit" - case C.PN_CONNECTION_BOUND: - return "ConnectionBound" - case C.PN_CONNECTION_UNBOUND: - return "ConnectionUnbound" - case C.PN_CONNECTION_LOCAL_OPEN: - return "ConnectionLocalOpen" - case C.PN_CONNECTION_REMOTE_OPEN: - return "ConnectionRemoteOpen" - case C.PN_CONNECTION_LOCAL_CLOSE: - return "ConnectionLocalClose" - case C.PN_CONNECTION_REMOTE_CLOSE: - return "ConnectionRemoteClose" - case C.PN_CONNECTION_FINAL: - return "ConnectionFinal" - case C.PN_SESSION_INIT: - return "SessionInit" - case C.PN_SESSION_LOCAL_OPEN: - return "SessionLocalOpen" - case C.PN_SESSION_REMOTE_OPEN: - return "SessionRemoteOpen" - case C.PN_SESSION_LOCAL_CLOSE: - return "SessionLocalClose" - case C.PN_SESSION_REMOTE_CLOSE: - return "SessionRemoteClose" - case C.PN_SESSION_FINAL: - return "SessionFinal" - case C.PN_LINK_INIT: - return "LinkInit" - case C.PN_LINK_LOCAL_OPEN: - return "LinkLocalOpen" - case C.PN_LINK_REMOTE_OPEN: - return "LinkRemoteOpen" - case C.PN_LINK_LOCAL_CLOSE: - return "LinkLocalClose" - case C.PN_LINK_REMOTE_CLOSE: - return "LinkRemoteClose" - case C.PN_LINK_LOCAL_DETACH: - return "LinkLocalDetach" - case C.PN_LINK_REMOTE_DETACH: - return "LinkRemoteDetach" - case C.PN_LINK_FLOW: - return "LinkFlow" - case C.PN_LINK_FINAL: - return "LinkFinal" - case C.PN_DELIVERY: - return "Delivery" - case C.PN_TRANSPORT: - return "Transport" - case C.PN_TRANSPORT_AUTHENTICATED: - return "TransportAuthenticated" - case C.PN_TRANSPORT_ERROR: - return "TransportError" - case C.PN_TRANSPORT_HEAD_CLOSED: - return "TransportHeadClosed" - case C.PN_TRANSPORT_TAIL_CLOSED: - return "TransportTailClosed" - case C.PN_TRANSPORT_CLOSED: - return "TransportClosed" - } - return "Unknown" -} - -// Wrappers for declarations in session.h - -type Session struct{ pn *C.pn_session_t } - -func (s Session) IsNil() bool { return s.pn == nil } -func (s Session) CPtr() unsafe.Pointer { return unsafe.Pointer(s.pn) } -func (s Session) Free() { - C.pn_session_free(s.pn) -} -func (s Session) State() State { - return State(C.pn_session_state(s.pn)) -} -func (s Session) Error() error { - return PnError(C.pn_session_error(s.pn)) -} -func (s Session) Condition() Condition { - return Condition{C.pn_session_condition(s.pn)} -} -func (s Session) RemoteCondition() Condition { - return Condition{C.pn_session_remote_condition(s.pn)} -} -func (s Session) Connection() Connection { - return Connection{C.pn_session_connection(s.pn)} -} -func (s Session) Open() { - C.pn_session_open(s.pn) -} -func (s Session) Close() { - C.pn_session_close(s.pn) -} -func (s Session) IncomingCapacity() uint { - return uint(C.pn_session_get_incoming_capacity(s.pn)) -} -func (s Session) SetIncomingCapacity(capacity uint) { - C.pn_session_set_incoming_capacity(s.pn, C.size_t(capacity)) -} -func (s Session) OutgoingWindow() uint { - return uint(C.pn_session_get_outgoing_window(s.pn)) -} -func (s Session) SetOutgoingWindow(window uint) { - C.pn_session_set_outgoing_window(s.pn, C.size_t(window)) -} -func (s Session) OutgoingBytes() uint { - return uint(C.pn_session_outgoing_bytes(s.pn)) -} -func (s Session) IncomingBytes() uint { - return uint(C.pn_session_incoming_bytes(s.pn)) -} -func (s Session) Next(state State) Session { - return Session{C.pn_session_next(s.pn, C.pn_state_t(state))} -} - -// Wrappers for declarations in link.h - -type SndSettleMode C.pn_snd_settle_mode_t - -const ( - SndUnsettled SndSettleMode = C.PN_SND_UNSETTLED - SndSettled SndSettleMode = C.PN_SND_SETTLED - SndMixed SndSettleMode = C.PN_SND_MIXED -) - -func (e SndSettleMode) String() string { - switch e { - - case C.PN_SND_UNSETTLED: - return "SndUnsettled" - case C.PN_SND_SETTLED: - return "SndSettled" - case C.PN_SND_MIXED: - return "SndMixed" - } - return "unknown" -} - -type RcvSettleMode C.pn_rcv_settle_mode_t - -const ( - RcvFirst RcvSettleMode = C.PN_RCV_FIRST - RcvSecond RcvSettleMode = C.PN_RCV_SECOND -) - -func (e RcvSettleMode) String() string { - switch e { - - case C.PN_RCV_FIRST: - return "RcvFirst" - case C.PN_RCV_SECOND: - return "RcvSecond" - } - return "unknown" -} - -type Link struct{ pn *C.pn_link_t } - -func (l Link) IsNil() bool { return l.pn == nil } -func (l Link) CPtr() unsafe.Pointer { return unsafe.Pointer(l.pn) } -func (l Link) Free() { - C.pn_link_free(l.pn) -} -func (l Link) Name() string { - return C.GoString(C.pn_link_name(l.pn)) -} -func (l Link) IsSender() bool { - return bool(C.pn_link_is_sender(l.pn)) -} -func (l Link) IsReceiver() bool { - return bool(C.pn_link_is_receiver(l.pn)) -} -func (l Link) State() State { - return State(C.pn_link_state(l.pn)) -} -func (l Link) Error() error { - return PnError(C.pn_link_error(l.pn)) -} -func (l Link) Condition() Condition { - return Condition{C.pn_link_condition(l.pn)} -} -func (l Link) RemoteCondition() Condition { - return Condition{C.pn_link_remote_condition(l.pn)} -} -func (l Link) Session() Session { - return Session{C.pn_link_session(l.pn)} -} -func (l Link) Next(state State) Link { - return Link{C.pn_link_next(l.pn, C.pn_state_t(state))} -} -func (l Link) Open() { - C.pn_link_open(l.pn) -} -func (l Link) Close() { - C.pn_link_close(l.pn) -} -func (l Link) Detach() { - C.pn_link_detach(l.pn) -} -func (l Link) Source() Terminus { - return Terminus{C.pn_link_source(l.pn)} -} -func (l Link) Target() Terminus { - return Terminus{C.pn_link_target(l.pn)} -} -func (l Link) RemoteSource() Terminus { - return Terminus{C.pn_link_remote_source(l.pn)} -} -func (l Link) RemoteTarget() Terminus { - return Terminus{C.pn_link_remote_target(l.pn)} -} -func (l Link) Current() Delivery { - return Delivery{C.pn_link_current(l.pn)} -} -func (l Link) Advance() bool { - return bool(C.pn_link_advance(l.pn)) -} -func (l Link) Credit() int { - return int(C.pn_link_credit(l.pn)) -} -func (l Link) Queued() int { - return int(C.pn_link_queued(l.pn)) -} -func (l Link) RemoteCredit() int { - return int(C.pn_link_remote_credit(l.pn)) -} -func (l Link) Drained() int { - return int(C.pn_link_drained(l.pn)) -} -func (l Link) Available() int { - return int(C.pn_link_available(l.pn)) -} -func (l Link) SndSettleMode() SndSettleMode { - return SndSettleMode(C.pn_link_snd_settle_mode(l.pn)) -} -func (l Link) RcvSettleMode() RcvSettleMode { - return RcvSettleMode(C.pn_link_rcv_settle_mode(l.pn)) -} -func (l Link) SetSndSettleMode(mode SndSettleMode) { - C.pn_link_set_snd_settle_mode(l.pn, C.pn_snd_settle_mode_t(mode)) -} -func (l Link) SetRcvSettleMode(mode RcvSettleMode) { - C.pn_link_set_rcv_settle_mode(l.pn, C.pn_rcv_settle_mode_t(mode)) -} -func (l Link) RemoteSndSettleMode() SndSettleMode { - return SndSettleMode(C.pn_link_remote_snd_settle_mode(l.pn)) -} -func (l Link) RemoteRcvSettleMode() RcvSettleMode { - return RcvSettleMode(C.pn_link_remote_rcv_settle_mode(l.pn)) -} -func (l Link) Unsettled() int { - return int(C.pn_link_unsettled(l.pn)) -} -func (l Link) Offered(credit int) { - C.pn_link_offered(l.pn, C.int(credit)) -} -func (l Link) Flow(credit int) { - C.pn_link_flow(l.pn, C.int(credit)) -} -func (l Link) Drain(credit int) { - C.pn_link_drain(l.pn, C.int(credit)) -} -func (l Link) SetDrain(drain bool) { - C.pn_link_set_drain(l.pn, C.bool(drain)) -} -func (l Link) Draining() bool { - return bool(C.pn_link_draining(l.pn)) -} - -// Wrappers for declarations in delivery.h - -type Delivery struct{ pn *C.pn_delivery_t } - -func (d Delivery) IsNil() bool { return d.pn == nil } -func (d Delivery) CPtr() unsafe.Pointer { return unsafe.Pointer(d.pn) } -func (d Delivery) Tag() DeliveryTag { - return DeliveryTag{C.pn_delivery_tag(d.pn)} -} -func (d Delivery) Link() Link { - return Link{C.pn_delivery_link(d.pn)} -} -func (d Delivery) Local() Disposition { - return Disposition{C.pn_delivery_local(d.pn)} -} -func (d Delivery) LocalState() uint64 { - return uint64(C.pn_delivery_local_state(d.pn)) -} -func (d Delivery) Remote() Disposition { - return Disposition{C.pn_delivery_remote(d.pn)} -} -func (d Delivery) RemoteState() uint64 { - return uint64(C.pn_delivery_remote_state(d.pn)) -} -func (d Delivery) Settled() bool { - return bool(C.pn_delivery_settled(d.pn)) -} -func (d Delivery) Pending() uint { - return uint(C.pn_delivery_pending(d.pn)) -} -func (d Delivery) Partial() bool { - return bool(C.pn_delivery_partial(d.pn)) -} -func (d Delivery) Writable() bool { - return bool(C.pn_delivery_writable(d.pn)) -} -func (d Delivery) Readable() bool { - return bool(C.pn_delivery_readable(d.pn)) -} -func (d Delivery) Updated() bool { - return bool(C.pn_delivery_updated(d.pn)) -} -func (d Delivery) Update(state uint64) { - C.pn_delivery_update(d.pn, C.uint64_t(state)) -} -func (d Delivery) Clear() { - C.pn_delivery_clear(d.pn) -} -func (d Delivery) Current() bool { - return bool(C.pn_delivery_current(d.pn)) -} -func (d Delivery) Settle() { - C.pn_delivery_settle(d.pn) -} -func (d Delivery) Dump() { - C.pn_delivery_dump(d.pn) -} -func (d Delivery) Buffered() bool { - return bool(C.pn_delivery_buffered(d.pn)) -} - -// Wrappers for declarations in disposition.h - -type Disposition struct{ pn *C.pn_disposition_t } - -func (d Disposition) IsNil() bool { return d.pn == nil } -func (d Disposition) CPtr() unsafe.Pointer { return unsafe.Pointer(d.pn) } -func (d Disposition) Type() uint64 { - return uint64(C.pn_disposition_type(d.pn)) -} -func (d Disposition) Condition() Condition { - return Condition{C.pn_disposition_condition(d.pn)} -} -func (d Disposition) Data() Data { - return Data{C.pn_disposition_data(d.pn)} -} -func (d Disposition) SectionNumber() uint16 { - return uint16(C.pn_disposition_get_section_number(d.pn)) -} -func (d Disposition) SetSectionNumber(section_number uint16) { - C.pn_disposition_set_section_number(d.pn, C.uint32_t(section_number)) -} -func (d Disposition) SectionOffset() uint64 { - return uint64(C.pn_disposition_get_section_offset(d.pn)) -} -func (d Disposition) SetSectionOffset(section_offset uint64) { - C.pn_disposition_set_section_offset(d.pn, C.uint64_t(section_offset)) -} -func (d Disposition) IsFailed() bool { - return bool(C.pn_disposition_is_failed(d.pn)) -} -func (d Disposition) SetFailed(failed bool) { - C.pn_disposition_set_failed(d.pn, C.bool(failed)) -} -func (d Disposition) IsUndeliverable() bool { - return bool(C.pn_disposition_is_undeliverable(d.pn)) -} -func (d Disposition) SetUndeliverable(undeliverable bool) { - C.pn_disposition_set_undeliverable(d.pn, C.bool(undeliverable)) -} -func (d Disposition) Annotations() Data { - return Data{C.pn_disposition_annotations(d.pn)} -} - -// Wrappers for declarations in condition.h - -type Condition struct{ pn *C.pn_condition_t } - -func (c Condition) IsNil() bool { return c.pn == nil } -func (c Condition) CPtr() unsafe.Pointer { return unsafe.Pointer(c.pn) } -func (c Condition) IsSet() bool { - return bool(C.pn_condition_is_set(c.pn)) -} -func (c Condition) Clear() { - C.pn_condition_clear(c.pn) -} -func (c Condition) Name() string { - return C.GoString(C.pn_condition_get_name(c.pn)) -} -func (c Condition) SetName(name string) int { - nameC := C.CString(name) - defer C.free(unsafe.Pointer(nameC)) - - return int(C.pn_condition_set_name(c.pn, nameC)) -} -func (c Condition) Description() string { - return C.GoString(C.pn_condition_get_description(c.pn)) -} -func (c Condition) SetDescription(description string) int { - descriptionC := C.CString(description) - defer C.free(unsafe.Pointer(descriptionC)) - - return int(C.pn_condition_set_description(c.pn, descriptionC)) -} -func (c Condition) Info() Data { - return Data{C.pn_condition_info(c.pn)} -} -func (c Condition) IsRedirect() bool { - return bool(C.pn_condition_is_redirect(c.pn)) -} -func (c Condition) RedirectHost() string { - return C.GoString(C.pn_condition_redirect_host(c.pn)) -} -func (c Condition) RedirectPort() int { - return int(C.pn_condition_redirect_port(c.pn)) -} - -// Wrappers for declarations in terminus.h - -type TerminusType C.pn_terminus_type_t - -const ( - Unspecified TerminusType = C.PN_UNSPECIFIED - Source TerminusType = C.PN_SOURCE - Target TerminusType = C.PN_TARGET - Coordinator TerminusType = C.PN_COORDINATOR -) - -func (e TerminusType) String() string { - switch e { - - case C.PN_UNSPECIFIED: - return "Unspecified" - case C.PN_SOURCE: - return "Source" - case C.PN_TARGET: - return "Target" - case C.PN_COORDINATOR: - return "Coordinator" - } - return "unknown" -} - -type Durability C.pn_durability_t - -const ( - Nondurable Durability = C.PN_NONDURABLE - Configuration Durability = C.PN_CONFIGURATION - Deliveries Durability = C.PN_DELIVERIES -) - -func (e Durability) String() string { - switch e { - - case C.PN_NONDURABLE: - return "Nondurable" - case C.PN_CONFIGURATION: - return "Configuration" - case C.PN_DELIVERIES: - return "Deliveries" - } - return "unknown" -} - -type ExpiryPolicy C.pn_expiry_policy_t - -const ( - ExpireWithLink ExpiryPolicy = C.PN_EXPIRE_WITH_LINK - ExpireWithSession ExpiryPolicy = C.PN_EXPIRE_WITH_SESSION - ExpireWithConnection ExpiryPolicy = C.PN_EXPIRE_WITH_CONNECTION - ExpireNever ExpiryPolicy = C.PN_EXPIRE_NEVER -) - -func (e ExpiryPolicy) String() string { - switch e { - - case C.PN_EXPIRE_WITH_LINK: - return "ExpireWithLink" - case C.PN_EXPIRE_WITH_SESSION: - return "ExpireWithSession" - case C.PN_EXPIRE_WITH_CONNECTION: - return "ExpireWithConnection" - case C.PN_EXPIRE_NEVER: - return "ExpireNever" - } - return "unknown" -} - -type DistributionMode C.pn_distribution_mode_t - -const ( - DistModeUnspecified DistributionMode = C.PN_DIST_MODE_UNSPECIFIED - DistModeCopy DistributionMode = C.PN_DIST_MODE_COPY - DistModeMove DistributionMode = C.PN_DIST_MODE_MOVE -) - -func (e DistributionMode) String() string { - switch e { - - case C.PN_DIST_MODE_UNSPECIFIED: - return "DistModeUnspecified" - case C.PN_DIST_MODE_COPY: - return "DistModeCopy" - case C.PN_DIST_MODE_MOVE: - return "DistModeMove" - } - return "unknown" -} - -type Terminus struct{ pn *C.pn_terminus_t } - -func (t Terminus) IsNil() bool { return t.pn == nil } -func (t Terminus) CPtr() unsafe.Pointer { return unsafe.Pointer(t.pn) } -func (t Terminus) Type() TerminusType { - return TerminusType(C.pn_terminus_get_type(t.pn)) -} -func (t Terminus) SetType(type_ TerminusType) int { - return int(C.pn_terminus_set_type(t.pn, C.pn_terminus_type_t(type_))) -} -func (t Terminus) Address() string { - return C.GoString(C.pn_terminus_get_address(t.pn)) -} -func (t Terminus) SetAddress(address string) int { - addressC := C.CString(address) - defer C.free(unsafe.Pointer(addressC)) - - return int(C.pn_terminus_set_address(t.pn, addressC)) -} -func (t Terminus) SetDistributionMode(mode DistributionMode) int { - return int(C.pn_terminus_set_distribution_mode(t.pn, C.pn_distribution_mode_t(mode))) -} -func (t Terminus) Durability() Durability { - return Durability(C.pn_terminus_get_durability(t.pn)) -} -func (t Terminus) SetDurability(durability Durability) int { - return int(C.pn_terminus_set_durability(t.pn, C.pn_durability_t(durability))) -} -func (t Terminus) ExpiryPolicy() ExpiryPolicy { - return ExpiryPolicy(C.pn_terminus_get_expiry_policy(t.pn)) -} -func (t Terminus) SetExpiryPolicy(policy ExpiryPolicy) int { - return int(C.pn_terminus_set_expiry_policy(t.pn, C.pn_expiry_policy_t(policy))) -} -func (t Terminus) Timeout() time.Duration { - return (time.Duration(C.pn_terminus_get_timeout(t.pn)) * time.Second) -} -func (t Terminus) SetTimeout(timeout time.Duration) int { - return int(C.pn_terminus_set_timeout(t.pn, C.pn_seconds_t(timeout))) -} -func (t Terminus) IsDynamic() bool { - return bool(C.pn_terminus_is_dynamic(t.pn)) -} -func (t Terminus) SetDynamic(dynamic bool) int { - return int(C.pn_terminus_set_dynamic(t.pn, C.bool(dynamic))) -} -func (t Terminus) Properties() Data { - return Data{C.pn_terminus_properties(t.pn)} -} -func (t Terminus) Capabilities() Data { - return Data{C.pn_terminus_capabilities(t.pn)} -} -func (t Terminus) Outcomes() Data { - return Data{C.pn_terminus_outcomes(t.pn)} -} -func (t Terminus) Filter() Data { - return Data{C.pn_terminus_filter(t.pn)} -} -func (t Terminus) Copy(src Terminus) int { - return int(C.pn_terminus_copy(t.pn, src.pn)) -} - -// Wrappers for declarations in connection.h - -type Connection struct{ pn *C.pn_connection_t } - -func (c Connection) IsNil() bool { return c.pn == nil } -func (c Connection) CPtr() unsafe.Pointer { return unsafe.Pointer(c.pn) } -func (c Connection) Free() { - C.pn_connection_free(c.pn) -} -func (c Connection) Release() { - C.pn_connection_release(c.pn) -} -func (c Connection) Error() error { - return PnError(C.pn_connection_error(c.pn)) -} -func (c Connection) State() State { - return State(C.pn_connection_state(c.pn)) -} -func (c Connection) Open() { - C.pn_connection_open(c.pn) -} -func (c Connection) Close() { - C.pn_connection_close(c.pn) -} -func (c Connection) Reset() { - C.pn_connection_reset(c.pn) -} -func (c Connection) Condition() Condition { - return Condition{C.pn_connection_condition(c.pn)} -} -func (c Connection) RemoteCondition() Condition { - return Condition{C.pn_connection_remote_condition(c.pn)} -} -func (c Connection) Container() string { - return C.GoString(C.pn_connection_get_container(c.pn)) -} -func (c Connection) SetContainer(container string) { - containerC := C.CString(container) - defer C.free(unsafe.Pointer(containerC)) - - C.pn_connection_set_container(c.pn, containerC) -} -func (c Connection) SetUser(user string) { - userC := C.CString(user) - defer C.free(unsafe.Pointer(userC)) - - C.pn_connection_set_user(c.pn, userC) -} -func (c Connection) User() string { - return C.GoString(C.pn_connection_get_user(c.pn)) -} -func (c Connection) Hostname() string { - return C.GoString(C.pn_connection_get_hostname(c.pn)) -} -func (c Connection) SetHostname(hostname string) { - hostnameC := C.CString(hostname) - defer C.free(unsafe.Pointer(hostnameC)) - - C.pn_connection_set_hostname(c.pn, hostnameC) -} -func (c Connection) RemoteContainer() string { - return C.GoString(C.pn_connection_remote_container(c.pn)) -} -func (c Connection) RemoteHostname() string { - return C.GoString(C.pn_connection_remote_hostname(c.pn)) -} -func (c Connection) OfferedCapabilities() Data { - return Data{C.pn_connection_offered_capabilities(c.pn)} -} -func (c Connection) DesiredCapabilities() Data { - return Data{C.pn_connection_desired_capabilities(c.pn)} -} -func (c Connection) Properties() Data { - return Data{C.pn_connection_properties(c.pn)} -} -func (c Connection) RemoteOfferedCapabilities() Data { - return Data{C.pn_connection_remote_offered_capabilities(c.pn)} -} -func (c Connection) RemoteDesiredCapabilities() Data { - return Data{C.pn_connection_remote_desired_capabilities(c.pn)} -} -func (c Connection) RemoteProperties() Data { - return Data{C.pn_connection_remote_properties(c.pn)} -} -func (c Connection) Transport() Transport { - return Transport{C.pn_connection_transport(c.pn)} -} - -// Wrappers for declarations in transport.h - -type Transport struct{ pn *C.pn_transport_t } - -func (t Transport) IsNil() bool { return t.pn == nil } -func (t Transport) CPtr() unsafe.Pointer { return unsafe.Pointer(t.pn) } -func (t Transport) SetServer() { - C.pn_transport_set_server(t.pn) -} -func (t Transport) Free() { - C.pn_transport_free(t.pn) -} -func (t Transport) User() string { - return C.GoString(C.pn_transport_get_user(t.pn)) -} -func (t Transport) RequireAuth(required bool) { - C.pn_transport_require_auth(t.pn, C.bool(required)) -} -func (t Transport) IsAuthenticated() bool { - return bool(C.pn_transport_is_authenticated(t.pn)) -} -func (t Transport) RequireEncryption(required bool) { - C.pn_transport_require_encryption(t.pn, C.bool(required)) -} -func (t Transport) IsEncrypted() bool { - return bool(C.pn_transport_is_encrypted(t.pn)) -} -func (t Transport) Condition() Condition { - return Condition{C.pn_transport_condition(t.pn)} -} -func (t Transport) Error() error { - return PnError(C.pn_transport_error(t.pn)) -} -func (t Transport) Bind(connection Connection) int { - return int(C.pn_transport_bind(t.pn, connection.pn)) -} -func (t Transport) Unbind() int { - return int(C.pn_transport_unbind(t.pn)) -} -func (t Transport) Log(message string) { - messageC := C.CString(message) - defer C.free(unsafe.Pointer(messageC)) - - C.pn_transport_log(t.pn, messageC) -} -func (t Transport) ChannelMax() uint32 { - return uint32(C.pn_transport_get_channel_max(t.pn)) -} -func (t Transport) SetChannelMax(channel_max uint32) int { - return int(C.pn_transport_set_channel_max(t.pn, C.uint16_t(channel_max))) -} -func (t Transport) RemoteChannelMax() uint32 { - return uint32(C.pn_transport_remote_channel_max(t.pn)) -} -func (t Transport) MaxFrame() uint16 { - return uint16(C.pn_transport_get_max_frame(t.pn)) -} -func (t Transport) SetMaxFrame(size uint16) { - C.pn_transport_set_max_frame(t.pn, C.uint32_t(size)) -} -func (t Transport) RemoteMaxFrame() uint16 { - return uint16(C.pn_transport_get_remote_max_frame(t.pn)) -} -func (t Transport) IdleTimeout() time.Duration { - return (time.Duration(C.pn_transport_get_idle_timeout(t.pn)) * time.Millisecond) -} -func (t Transport) SetIdleTimeout(timeout time.Duration) { - C.pn_transport_set_idle_timeout(t.pn, C.pn_millis_t(timeout/time.Millisecond)) -} -func (t Transport) RemoteIdleTimeout() time.Duration { - return (time.Duration(C.pn_transport_get_remote_idle_timeout(t.pn)) * time.Millisecond) -} -func (t Transport) Input(bytes string, available uint) int { - bytesC := C.CString(bytes) - defer C.free(unsafe.Pointer(bytesC)) - - return int(C.pn_transport_input(t.pn, bytesC, C.size_t(available))) -} -func (t Transport) Output(bytes string, size uint) int { - bytesC := C.CString(bytes) - defer C.free(unsafe.Pointer(bytesC)) - - return int(C.pn_transport_output(t.pn, bytesC, C.size_t(size))) -} -func (t Transport) Capacity() int { - return int(C.pn_transport_capacity(t.pn)) -} -func (t Transport) Process(size uint) int { - return int(C.pn_transport_process(t.pn, C.size_t(size))) -} -func (t Transport) CloseTail() int { - return int(C.pn_transport_close_tail(t.pn)) -} -func (t Transport) Pending() int { - return int(C.pn_transport_pending(t.pn)) -} -func (t Transport) Peek(dst string, size uint) int { - dstC := C.CString(dst) - defer C.free(unsafe.Pointer(dstC)) - - return int(C.pn_transport_peek(t.pn, dstC, C.size_t(size))) -} -func (t Transport) Pop(size uint) { - C.pn_transport_pop(t.pn, C.size_t(size)) -} -func (t Transport) CloseHead() int { - return int(C.pn_transport_close_head(t.pn)) -} -func (t Transport) Quiesced() bool { - return bool(C.pn_transport_quiesced(t.pn)) -} -func (t Transport) Closed() bool { - return bool(C.pn_transport_closed(t.pn)) -} -func (t Transport) Tick(now time.Time) time.Time { - return goTime(C.pn_transport_tick(t.pn, pnTime(now))) -} -func (t Transport) Connection() Connection { - return Connection{C.pn_transport_connection(t.pn)} -} - -// Wrappers for declarations in sasl.h - -type SASLOutcome C.pn_sasl_outcome_t - -const ( - SASLNone SASLOutcome = C.PN_SASL_NONE - SASLOk SASLOutcome = C.PN_SASL_OK - SASLAuth SASLOutcome = C.PN_SASL_AUTH - SASLSys SASLOutcome = C.PN_SASL_SYS - SASLPerm SASLOutcome = C.PN_SASL_PERM - SASLTemp SASLOutcome = C.PN_SASL_TEMP -) - -func (e SASLOutcome) String() string { - switch e { - - case C.PN_SASL_NONE: - return "SASLNone" - case C.PN_SASL_OK: - return "SASLOk" - case C.PN_SASL_AUTH: - return "SASLAuth" - case C.PN_SASL_SYS: - return "SASLSys" - case C.PN_SASL_PERM: - return "SASLPerm" - case C.PN_SASL_TEMP: - return "SASLTemp" - } - return "unknown" -} - -type SASL struct{ pn *C.pn_sasl_t } - -func (s SASL) IsNil() bool { return s.pn == nil } -func (s SASL) CPtr() unsafe.Pointer { return unsafe.Pointer(s.pn) } -func (s SASL) Done(outcome SASLOutcome) { - C.pn_sasl_done(s.pn, C.pn_sasl_outcome_t(outcome)) -} -func (s SASL) Outcome() SASLOutcome { - return SASLOutcome(C.pn_sasl_outcome(s.pn)) -} -func (s SASL) User() string { - return C.GoString(C.pn_sasl_get_user(s.pn)) -} -func (s SASL) Mech() string { - return C.GoString(C.pn_sasl_get_mech(s.pn)) -} -func (s SASL) AllowedMechs(mechs string) { - mechsC := C.CString(mechs) - defer C.free(unsafe.Pointer(mechsC)) - - C.pn_sasl_allowed_mechs(s.pn, mechsC) -} -func (s SASL) SetAllowInsecureMechs(insecure bool) { - C.pn_sasl_set_allow_insecure_mechs(s.pn, C.bool(insecure)) -} -func (s SASL) AllowInsecureMechs() bool { - return bool(C.pn_sasl_get_allow_insecure_mechs(s.pn)) -} -func (s SASL) ConfigName(name string) { - nameC := C.CString(name) - defer C.free(unsafe.Pointer(nameC)) - - C.pn_sasl_config_name(s.pn, nameC) -} -func (s SASL) ConfigPath(path string) { - pathC := C.CString(path) - defer C.free(unsafe.Pointer(pathC)) - - C.pn_sasl_config_path(s.pn, pathC) -} http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/go/src/qpid.apache.org/readme-go-get.md ---------------------------------------------------------------------- diff --git a/proton-c/bindings/go/src/qpid.apache.org/readme-go-get.md b/proton-c/bindings/go/src/qpid.apache.org/readme-go-get.md deleted file mode 100644 index 6eb1e2b..0000000 --- a/proton-c/bindings/go/src/qpid.apache.org/readme-go-get.md +++ /dev/null @@ -1,18 +0,0 @@ -The go-only subtree of proton is maintained on the branch `go1` for the `go get` -command. `go1` is special to the `go get` command, it will use that branch -rather than `master` when it is present. - -Created with: - - git subtree split --prefix=proton-c/bindings/go/src/qpid.apache.org -b go1 - -Update with: - - git checkout go1 - git merge -s recursive -Xsubtree=proton-c/bindings/go/src/qpid.apache.org master - -To see the branch description: `git config branch.go1.description` - -NOTE: when updating the branch, you should also visit the doc pages at -https://godoc.org/?q=qpid.apache.org and click "Refresh now" at the bottom of -the page http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/2f85988e/proton-c/bindings/javascript/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/proton-c/bindings/javascript/CMakeLists.txt b/proton-c/bindings/javascript/CMakeLists.txt deleted file mode 100644 index 971097c..0000000 --- a/proton-c/bindings/javascript/CMakeLists.txt +++ /dev/null @@ -1,279 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -# This file allows cross-compiling of proton to JavaScript using emscripten -# (https://github.com/kripken/emscripten). As it is really a cross-compilation -# (as opposed to a binding like with swig) the approach is rather different and -# somewhat replicates the main build in the proton-c/CMakeLists.txt using quite -# a bit of "copy and paste reuse". -# TODO refactor this file (and proton-c/CMakeLists.txt) to keep the main -# compilation and cross-compilation consistent. - -message(STATUS "Found emscripten, using that to build JavaScript binding") - -# Find and install the node.js packages that we might need. We can assume that -# node.js itself is installed because Emscripten has a dependency on it. -find_package(NodePackages) - -# Describe the target OS we are building to - Emscripten mimics the Linux platform. -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_VERSION 1) -set(CMAKE_CROSSCOMPILING TRUE) - -# Specify the compiler to use for cross-compilation. -set(CMAKE_C_COMPILER "${EMCC}") - -# Don't do compiler autodetection, since we are cross-compiling. -include(CMakeForceCompiler) -CMAKE_FORCE_C_COMPILER("${CMAKE_C_COMPILER}" Clang) - -# The Proton default build type is RelWithDebInfo, but for JavaScript the C debug -# mechanism is irrelevant. If Debug is explicitly set we turn off optimisations -# and don't run the closure compiler so any error/profiling messages are readable. -if (CMAKE_BUILD_TYPE STREQUAL "Debug") - message(STATUS "JavaScript build type is \"Debug\"") -else() - set(CMAKE_BUILD_TYPE Release) - message(STATUS "JavaScript build type is \"Release\"") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3") - set(EMSCRIPTEN_LINK_OPTIMISATIONS "-O2 --closure 1") -endif() - -# From this point we should be using emscripten compilation tools. -message(STATUS "emscripten compilation environment:") -message(STATUS "CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}") - - -# Set this to the proton-c directory, we're cross-compiling code from there. -set(PN_PATH ${CMAKE_SOURCE_DIR}/proton-c) - - -# TODO the OpenSSL stuff won't work for emscripten by default. It might well be -# possible to compile it from source using emscripten (that's the standard practice -# for libraries with emscripten) see https://github.com/kripken/emscripten/wiki/FAQ -# "Q. How do I link against system libraries like SDL, boost, etc.?" -# Though it might be more natural to simply use a TLS protected wss:// WebSocket URL. -# set(pn_ssl_impl src/ssl/openssl.c) -# set(SSL_LIB ${OPENSSL_LIBRARIES}) -set(pn_ssl_impl ${PN_PATH}/src/ssl/ssl_stub.c) - -# emscripten is Linux like so use the posix impls. -set(pn_io_impl ${PN_PATH}/src/posix/io.c) -set(pn_selector_impl ${PN_PATH}/src/posix/selector.c) - -CHECK_LIBRARY_EXISTS (uuid uuid_generate "" UUID_GENERATE_IN_UUID) -if (UUID_GENERATE_IN_UUID) - set (UUID_LIB uuid) -endif (UUID_GENERATE_IN_UUID) - -# Generate encodings.h and protocol.h -# It may be possible to use the ones generated for the main proton-c build but -# qpid-proton-core has a dependency on the generated files, so I'm not sure if -# it'll work without a command that can be run as a dependency. Probably best -# do it this way when cross-compiling - though more copy'n'paste -add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/encodings.h - COMMAND python ${PN_PATH}/env.py PYTHONPATH=${PN_PATH} python ${PN_PATH}/src/codec/encodings.h.py > ${CMAKE_CURRENT_BINARY_DIR}/encodings.h - DEPENDS ${PN_PATH}/src/codec/encodings.h.py - ) - -add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/protocol.h - COMMAND python ${PN_PATH}/env.py PYTHONPATH=${PN_PATH} python ${PN_PATH}/src/protocol.h.py > ${CMAKE_CURRENT_BINARY_DIR}/protocol.h - DEPENDS ${PN_PATH}/src/protocol.h.py - ) - -set(COMPILE_WARNING_FLAGS "-Werror -Wall -pedantic-errors -Wno-comment -Wno-warn-absolute-paths") - -# Explicitly set PLATFORM_DEFINITIONS to Linux ones for emscripten as we don't -# want to inadvertently use Windows versions if we happen to be cross-compiling -# from a Windows platform -set(PLATFORM_DEFINITIONS "USE_CLOCK_GETTIME;USE_UUID_GENERATE;USE_STRERROR_R;USE_ATOLL") - -# The following is largely a copy from the the main proton-c/CMakeLists.txt. -# The main difference is prefixing paths with ${PN_PATH}/ as we can't use a -# relative path from this CMakeLists.txt. - -set(qpid-proton-platform - ${pn_io_impl} - ${pn_selector_impl} - ${PN_PATH}/src/platform.c - ${pn_ssl_impl} - ) - -set(qpid-proton-core - ${PN_PATH}/src/object/object.c - ${PN_PATH}/src/object/list.c - ${PN_PATH}/src/object/map.c - ${PN_PATH}/src/object/string.c - ${PN_PATH}/src/object/iterator.c - ${PN_PATH}/src/object/record.c - - ${PN_PATH}/src/log.c - ${PN_PATH}/src/util.c - ${PN_PATH}/src/url.c - ${PN_PATH}/src/error.c - ${PN_PATH}/src/buffer.c - ${PN_PATH}/src/parser.c - ${PN_PATH}/src/scanner.c - ${PN_PATH}/src/types.c - - ${PN_PATH}/src/framing/framing.c - - ${PN_PATH}/src/codec/codec.c - ${PN_PATH}/src/codec/decoder.c - ${PN_PATH}/src/codec/encoder.c - - ${PN_PATH}/src/dispatcher/dispatcher.c - ${PN_PATH}/src/engine/engine.c - ${PN_PATH}/src/events/event.c - ${PN_PATH}/src/transport/autodetect.c - ${PN_PATH}/src/transport/transport.c - ${PN_PATH}/src/message/message.c - ${PN_PATH}/src/sasl/sasl.c - ${PN_PATH}/src/sasl/none_sasl.c - - ${PN_PATH}/src/messenger/messenger.c - ${PN_PATH}/src/messenger/subscription.c - ${PN_PATH}/src/messenger/store.c - ${PN_PATH}/src/messenger/transform.c - ${PN_PATH}/src/selectable.c - - ${CMAKE_CURRENT_BINARY_DIR}/encodings.h - ${CMAKE_CURRENT_BINARY_DIR}/protocol.h - ) - -set_source_files_properties( - ${qpid-proton-core} - PROPERTIES - COMPILE_FLAGS "${COMPILE_WARNING_FLAGS} ${COMPILE_LANGUAGE_FLAGS}" - ) - -set_source_files_properties( - ${qpid-proton-platform} - PROPERTIES - COMPILE_FLAGS "${COMPILE_WARNING_FLAGS} ${COMPILE_PLATFORM_FLAGS}" - COMPILE_DEFINITIONS "${PLATFORM_DEFINITIONS}" - ) - -# Compile Proton into LLVM bitcode which will be used later in the linking stage -# of add_executable for compilation into Javascript. -add_library( - qpid-proton-bitcode SHARED - - ${qpid-proton-core} - ${qpid-proton-platform} - ) - -set_target_properties( - qpid-proton-bitcode - PROPERTIES - VERSION "${PN_LIB_SOMAJOR}.${PN_LIB_SOMINOR}" - SOVERSION "${PN_LIB_SOMAJOR}" - LINK_FLAGS "${CATCH_UNDEFINED}" - ) -target_link_libraries(qpid-proton-bitcode) - - -# Compile the send-async.c and recv-async.c examples into JavaScript -include_directories(${Proton_SOURCE_DIR}/examples/c/include) -add_executable(send-async.js ${Proton_SOURCE_DIR}/examples/c/messenger/send-async.c) -target_link_libraries(send-async.js qpid-proton-bitcode) - -add_executable(recv-async.js ${Proton_SOURCE_DIR}/examples/c/messenger/recv-async.c) -target_link_libraries(recv-async.js qpid-proton-bitcode) - -set_target_properties( - send-async.js recv-async.js - PROPERTIES - COMPILE_FLAGS "${COMPILE_WARNING_FLAGS} ${COMPILE_PLATFORM_FLAGS}" - RUNTIME_OUTPUT_DIRECTORY examples - DEPENDS ws - - LINK_FLAGS "-s \"WEBSOCKET_SUBPROTOCOL='AMQPWSB10'\" -${EMSCRIPTEN_LINK_OPTIMISATIONS}" - ) - -# Build the main JavaScript library called proton-messenger.js -add_executable(proton-messenger.js binding.c) -target_link_libraries(proton-messenger.js qpid-proton-bitcode ${UUID_LIB}) - -set_target_properties( - proton-messenger.js - PROPERTIES - COMPILE_FLAGS "${COMPILE_WARNING_FLAGS} ${COMPILE_PLATFORM_FLAGS}" - - # The --memory-init-file 0 stops emscripten emitting a separate memory - # initialization file, if this was enabled it makes packaging harder as - # applications would expect proton-messenger.js.mem to be served too. It's even - # more fiddly with node.js packages. This behaviour might be reinstated if the - # packaging mechanism improves. - - LINK_FLAGS "-s \"EXPORT_NAME='proton'\" -s \"WEBSOCKET_SUBPROTOCOL='AMQPWSB10'\" ${EMSCRIPTEN_LINK_OPTIMISATIONS} --memory-init-file 0 --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/binding-open.js --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/module.js --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/error.js --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/messenger.js --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/subscription.js --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/message.js --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/data.js --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/data-uuid.js --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/data-symbol.js --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/data-described.js --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/data-array.js --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/data-typed-number.js --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/data-long.js --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/data-binary.js --post-js ${CMAKE_CURRENT_SOURCE_DIR}/binding-close.js -s DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=\"[]\" -s EXPORTED_FUNCTIONS=\"['_pn_get_version_major', '_ pn_get_version_minor', '_pn_uuid_generate', '_pn_bytes', '_pn_error_text', '_pn_code', '_pn_messenger', '_pn_messenger_name', '_pn_messenger_set_blocking', '_pn_messenger_free', '_pn_messenger_errno', '_pn_messenger_error', '_pn_messenger_get_outgoing_window', '_pn_messenger_set_outgoing_window', '_pn_messenger_get_incoming_window', '_pn_messenger_set_incoming_window', '_pn_messenger_start', '_pn_messenger_stop', '_pn_messenger_stopped', '_pn_messenger_subscribe', '_pn_messenger_put', '_pn_messenger_status', '_pn_messenger_buffered', '_pn_messenger_settle', '_pn_messenger_outgoing_tracker', '_pn_messenger_recv', '_pn_messenger_receiving', '_pn_messenger_get', '_pn_messenger_incoming_tracker', '_pn_messenger_incoming_subscription', '_pn_messenger_accept', '_pn_messenger_reject', '_pn_messenger_outgoing', '_pn_messenger_incoming', '_pn_messenger_route', '_pn_messenger_rewrite', '_pn_messenger_set_passive', '_pn_messenger_selectable', '_pn_subscription_get_context', '_pn_subscription_ set_context', '_pn_subscription_address', '_pn_message', '_pn_message_id', '_pn_message_correlation_id', '_pn_message_free', '_pn_message_errno', '_pn_message_error', '_pn_message_clear', '_pn_message_is_inferred', '_pn_message_set_inferred', '_pn_message_is_durable', '_pn_message_set_durable', '_pn_message_get_priority', '_pn_message_set_priority', '_pn_message_get_ttl', '_pn_message_set_ttl', '_pn_message_is_first_acquirer', '_pn_message_set_first_acquirer', '_pn_message_get_delivery_count', '_pn_message_set_delivery_count', '_pn_message_get_user_id', '_pn_message_set_user_id', '_pn_message_get_address', '_pn_message_set_address', '_pn_message_get_subject', '_pn_message_set_subject', '_pn_message_get_reply_to', '_pn_message_set_reply_to', '_pn_message_get_content_type', '_pn_message_set_content_type', '_pn_message_get_content_encoding', '_pn_message_set_content_encoding', '_pn_message_get_expiry_time', '_pn_message_set_expiry_time', '_pn_message_get_creation_time', '_pn_message_se t_creation_time', '_pn_message_get_group_id', '_pn_message_set_group_id', '_pn_message_get_group_sequence', '_pn_message_set_group_sequence', '_pn_message_get_reply_to_group_id', '_pn_message_set_reply_to_group_id', '_pn_message_encode', '_pn_message_decode', '_pn_message_instructions', '_pn_message_annotations', '_pn_message_properties', '_pn_message_body', '_pn_data', '_pn_data_free', '_pn_data_error', '_pn_data_errno', '_pn_data_clear', '_pn_data_rewind', '_pn_data_next', '_pn_data_prev', '_pn_data_enter', '_pn_data_exit', '_pn_data_lookup', '_pn_data_narrow', '_pn_data_widen', '_pn_data_type', '_pn_data_encode', '_pn_data_decode', '_pn_data_put_list', '_pn_data_put_map', '_pn_data_put_array', '_pn_data_put_described', '_pn_data_put_null', '_pn_data_put_bool', '_pn_data_put_ubyte', '_pn_data_put_byte', '_pn_data_put_ushort', '_pn_data_put_short', '_pn_data_put_uint', '_pn_data_put_int', '_pn_data_put_char', '_pn_data_put_ulong', '_pn_data_put_long', '_pn_data_put_timestamp', '_pn _data_put_float', '_pn_data_put_double', '_pn_data_put_decimal32', '_pn_data_put_decimal64', '_pn_data_put_decimal128', '_pn_data_put_uuid', '_pn_data_put_binary', '_pn_data_put_string', '_pn_data_put_symbol', '_pn_data_get_list', '_pn_data_get_map', '_pn_data_get_array', '_pn_data_is_array_described', '_pn_data_get_array_type', '_pn_data_is_described', '_pn_data_is_null', '_pn_data_get_bool', '_pn_data_get_ubyte', '_pn_data_get_byte', '_pn_data_get_ushort', '_pn_data_get_short', '_pn_data_get_uint', '_pn_data_get_int', '_pn_data_get_char', '_pn_data_get_ulong', '_pn_data_get_long', '_pn_data_get_timestamp', '_pn_data_get_float', '_pn_data_get_double', '_pn_data_get_decimal32', '_pn_data_get_decimal64', '_pn_data_get_decimal128', '_pn_data_get_uuid', '_pn_data_get_binary', '_pn_data_get_string', '_pn_data_get_symbol', '_pn_data_copy', '_pn_data_format', '_pn_data_dump', '_pn_selectable_readable', '_pn_selectable_is_reading', '_pn_selectable_writable', '_pn_selectable_is_writing', '_ pn_selectable_is_terminal', '_pn_selectable_get_fd', '_pn_selectable_free']\"" - ) - -# This command packages up the compiled proton-messenger.js into a node.js package -# called qpid-proton-messenger and copies it to the <proton>/node_modules directory. -# This allows the node.js test and example programs to do: -# var proton = require("qpid-proton-messenger"); -add_custom_command( - TARGET proton-messenger.js - COMMAND ${CMAKE_COMMAND} - -E copy_directory - ${CMAKE_CURRENT_SOURCE_DIR}/qpid-proton-messenger - ${PROJECT_SOURCE_DIR}/node_modules/qpid-proton-messenger - COMMAND ${CMAKE_COMMAND} - -E copy - ${CMAKE_CURRENT_BINARY_DIR}/proton-messenger.js - ${PROJECT_SOURCE_DIR}/node_modules/qpid-proton-messenger/lib - COMMENT "Building qpid-proton-messenger package for node.js" -) - -# The cleanall target removes the qpid-proton-messenger package from <proton>/node_modules -add_custom_target( - cleanall - COMMAND echo "CLEAN NODE MODULES" - COMMAND ${CMAKE_COMMAND} - -E remove_directory - ${PROJECT_SOURCE_DIR}/node_modules/qpid-proton-messenger -) - -# If the docs target is specified and the jsdoc3 package for node.js has been -# installed then build the JavaScript API documentation. -if (NODE_JSDOC_FOUND) - set(JSDOC_EXE ${PROJECT_SOURCE_DIR}/node_modules/.bin/jsdoc) - - message(STATUS "Documentation Enabled. Using ${JSDOC_EXE} to build JavaScript docs") - add_custom_target(docs-js COMMAND ${JSDOC_EXE} - -d ${CMAKE_CURRENT_BINARY_DIR}/html - ${CMAKE_CURRENT_SOURCE_DIR}/module.js - ${CMAKE_CURRENT_SOURCE_DIR}/error.js - ${CMAKE_CURRENT_SOURCE_DIR}/messenger.js - ${CMAKE_CURRENT_SOURCE_DIR}/subscription.js - ${CMAKE_CURRENT_SOURCE_DIR}/message.js - ${CMAKE_CURRENT_SOURCE_DIR}/data.js - ${CMAKE_CURRENT_SOURCE_DIR}/data-uuid.js - ${CMAKE_CURRENT_SOURCE_DIR}/data-symbol.js - ${CMAKE_CURRENT_SOURCE_DIR}/data-described.js - ${CMAKE_CURRENT_SOURCE_DIR}/data-array.js - ${CMAKE_CURRENT_SOURCE_DIR}/data-typed-number.js - ${CMAKE_CURRENT_SOURCE_DIR}/data-long.js - ${CMAKE_CURRENT_SOURCE_DIR}/data-binary.js) - add_dependencies(docs docs-js) -endif (NODE_JSDOC_FOUND) - --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
