svn commit: r1630745 [1/2] - in /qpid/branches/QPID-6125-ProtocolRefactoring/java: bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/ broker-plugins/amqp-0-8-protocol/src/main/java/org/ap
Author: rgodfrey Date: Fri Oct 10 09:54:36 2014 New Revision: 1630745 URL: http://svn.apache.org/r1630745 Log: More refactoring Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java qpid/branches/QPID-6125-ProtocolRefactoring/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java qpid/branches/QPID-6125-ProtocolRefactoring/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolSession.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/codec/AMQDecoder.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockDecoder.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/AccessRequestBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/AccessRequestOkBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/BasicAckBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/BasicCancelBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/BasicCancelOkBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/BasicConsumeBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/BasicConsumeOkBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/BasicDeliverBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/BasicGetBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/BasicGetEmptyBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/BasicGetOkBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/BasicPublishBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/BasicQosBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/BasicRecoverBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/BasicRecoverSyncBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/BasicRejectBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/BasicReturnBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ChannelAlertBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ChannelCloseBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ChannelFlowBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ChannelFlowOkBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ChannelOpenBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ChannelOpenOkBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ConnectionCloseBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ConnectionOpenBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ConnectionOpenOkBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ConnectionRedirectBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ConnectionSecureBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ConnectionSecureOkBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ConnectionStartBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ConnectionStartOkBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ConnectionTuneBody.java qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ConnectionTuneOkBody.java
svn commit: r1630745 [2/2] - in /qpid/branches/QPID-6125-ProtocolRefactoring/java: bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/ broker-plugins/amqp-0-8-protocol/src/main/java/org/ap
Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ConnectionTuneOkBody.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ConnectionTuneOkBody.java?rev=1630745r1=1630744r2=1630745view=diff == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ConnectionTuneOkBody.java (original) +++ qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ConnectionTuneOkBody.java Fri Oct 10 09:54:36 2014 @@ -119,12 +119,12 @@ public class ConnectionTuneOkBody extend return buf.toString(); } -public static T T process(final MarkableDataInput buffer, final MethodProcessorT dispatcher) throws IOException +public static void process(final MarkableDataInput buffer, final MethodProcessor dispatcher) throws IOException { int channelMax = buffer.readUnsignedShort(); long frameMax = EncodingUtils.readUnsignedInteger(buffer); int heartbeat = buffer.readUnsignedShort(); -return dispatcher.connectionTuneOk(channelMax, frameMax, heartbeat); +dispatcher.receiveConnectionTuneOk(channelMax, frameMax, heartbeat); } } Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ContentBody.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ContentBody.java?rev=1630745r1=1630744r2=1630745view=diff == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ContentBody.java (original) +++ qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ContentBody.java Fri Oct 10 09:54:36 2014 @@ -92,14 +92,14 @@ public class ContentBody implements AMQB return _payload; } -public static T T process(final int channel, +public static void process(final int channel, final MarkableDataInput in, - final MethodProcessorT methodProcessor, final long bodySize) + final MethodProcessor methodProcessor, final long bodySize) throws IOException { byte[] payload = new byte[(int)bodySize]; in.readFully(payload); -return methodProcessor.messageContent(channel, payload); +methodProcessor.receiveMessageContent(channel, payload); } private static class BufferContentBody implements AMQBody Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBody.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBody.java?rev=1630745r1=1630744r2=1630745view=diff == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBody.java (original) +++ qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBody.java Fri Oct 10 09:54:36 2014 @@ -155,9 +155,9 @@ public class ContentHeaderBody implement _bodySize = bodySize; } -public static T T process(final int channelId, +public static void process(final int channelId, final MarkableDataInput buffer, -final MethodProcessorT methodProcessor, final long size) +final MethodProcessor methodProcessor, final long size) throws IOException, AMQFrameDecodingException { @@ -175,6 +175,6 @@ public class ContentHeaderBody implement properties = new BasicContentHeaderProperties(); properties.populatePropertiesFromBuffer(buffer, propertyFlags, (int)(size-14)); -return methodProcessor.messageHeader(channelId, properties, bodySize); +methodProcessor.receiveMessageHeader(channelId, properties, bodySize); } } Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ExchangeBoundBody.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ExchangeBoundBody.java?rev=1630745r1=1630744r2=1630745view=diff == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/common/src/main/java/org/apache/qpid/framing/ExchangeBoundBody.java (original) +++
svn commit: r1630749 [2/6] - in /qpid/branches/QPID-6125-ProtocolRefactoring/java: ./ bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/ bdbstore/src/main/java/org/apache/qpid/ser
Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/JsonSystemConfigImpl.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/JsonSystemConfigImpl.java?rev=1630749r1=1630748r2=1630749view=diff == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/JsonSystemConfigImpl.java (original) +++ qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/JsonSystemConfigImpl.java Fri Oct 10 09:59:55 2014 @@ -38,9 +38,10 @@ public class JsonSystemConfigImpl extend public JsonSystemConfigImpl(final TaskExecutor taskExecutor, final EventLogger eventLogger, final LogRecorder logRecorder, -final BrokerOptions brokerOptions) +final BrokerOptions brokerOptions, +final BrokerShutdownProvider brokerShutdownProvider) { -super(taskExecutor, eventLogger, logRecorder, brokerOptions); +super(taskExecutor, eventLogger, logRecorder, brokerOptions, brokerShutdownProvider); } public String getStorePath() Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfig.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfig.java?rev=1630749r1=1630748r2=1630749view=diff == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfig.java (original) +++ qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/SystemConfig.java Fri Oct 10 09:59:55 2014 @@ -37,4 +37,6 @@ public interface SystemConfigX extends LogRecorder getLogRecorder(); DurableConfigurationStore getConfigurationStore(); + +BrokerShutdownProvider getBrokerShutdownProvider(); } Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1630749r1=1630748r2=1630749view=diff == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java (original) +++ qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java Fri Oct 10 09:59:55 2014 @@ -943,6 +943,28 @@ public class BrokerAdapter extends Abstr _eventLogger = eventLogger; } +@Override +protected void onExceptionInOpen(RuntimeException e) +{ +SystemConfig systemConfig = getParent(SystemConfig.class); +if (systemConfig != null) +{ +BrokerShutdownProvider shutdownProvider = systemConfig.getBrokerShutdownProvider(); +if (shutdownProvider != null) +{ +shutdownProvider.shutdown(); +} +else +{ +throw new IllegalStateException(Shutdown provider is not found in system config); +} +} +else +{ +throw new IllegalStateException(SystemConfig is not found among broker parents); +} +} + public void registerMessageDelivered(long messageSize) { _messagesDelivered.registerEvent(1L); Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java?rev=1630749r1=1630748r2=1630749view=diff == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java (original) +++ qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java Fri Oct 10 09:59:55 2014 @@ -114,22 +114,27 @@ public class FileBasedGroupProviderImpl throw new IllegalArgumentException(Cannot change the path); } } + +@Override protected void
svn commit: r1630749 [5/6] - in /qpid/branches/QPID-6125-ProtocolRefactoring/java: ./ bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/ bdbstore/src/main/java/org/apache/qpid/ser
Propchange: qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ServerMethodDispatcherImpl.java -- svn:eol-style = native Added: qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ServerMethodProcessor.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ServerMethodProcessor.java?rev=1630749view=auto == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ServerMethodProcessor.java (added) +++ qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ServerMethodProcessor.java Fri Oct 10 09:59:55 2014 @@ -0,0 +1,957 @@ +/* + * + * 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 org.apache.qpid.server.protocol.v0_8; + +import java.security.PrivilegedAction; + +import javax.security.auth.Subject; +import javax.security.sasl.SaslException; +import javax.security.sasl.SaslServer; + +import org.apache.log4j.Logger; + +import org.apache.qpid.framing.*; +import org.apache.qpid.protocol.AMQConstant; +import org.apache.qpid.server.model.Broker; +import org.apache.qpid.server.security.SubjectCreator; +import org.apache.qpid.server.security.auth.SubjectAuthenticationResult; + +public class ServerMethodProcessor implements MethodProcessor +{ +private static final Logger LOGGER = Logger.getLogger(ServerMethodProcessor.class); + + +private static interface ChannelAction +{ +void onChannel(ChannelMethodProcessor channel); +} + +private ProtocolVersion _protocolVersion; +private ServerMethodDispatcherImpl _dispatcher; +private AMQProtocolEngine _connection; + +public ServerMethodProcessor(final ProtocolVersion protocolVersion) +{ +_protocolVersion = protocolVersion; +} + + +private void processChannelMethod(int channelId, final ChannelAction action) +{ +final AMQChannel channel = _connection.getChannel(channelId); +if (channel == null) +{ +// TODO throw body.getChannelNotFoundException(channelId, _connection.getMethodRegistry()); +} +else +{ +Subject.doAs(channel.getSubject(), new PrivilegedActionVoid() +{ +@Override +public Void run() +{ +action.onChannel(channel.getMethodProcessor()); +return null; +} +}); +} + +} + +@Override +public void receiveConnectionStart(final short versionMajor, + final short versionMinor, + final FieldTable serverProperties, + final byte[] mechanisms, + final byte[] locales) +{ +if (LOGGER.isDebugEnabled()) +{ +AMQFrame frame = new AMQFrame(0, + new ConnectionStartBody(versionMajor, + versionMinor, + serverProperties, + mechanisms, + locales)); +} +_connection.closeConnection(AMQConstant.COMMAND_INVALID, Unexpected method received: ConnectionStart, 0, +ConnectionStartBody.CLASS_ID, ConnectionStartBody.METHOD_ID); + +} + +@Override +public void receiveConnectionStartOk(final FieldTable clientProperties, + final AMQShortString mechanism, +
svn commit: r1630749 [1/6] - in /qpid/branches/QPID-6125-ProtocolRefactoring/java: ./ bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/ bdbstore/src/main/java/org/apache/qpid/ser
Author: rgodfrey Date: Fri Oct 10 09:59:55 2014 New Revision: 1630749 URL: http://svn.apache.org/r1630749 Log: Merge from trunk Added: qpid/branches/QPID-6125-ProtocolRefactoring/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhost/ - copied from r1630746, qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhost/ qpid/branches/QPID-6125-ProtocolRefactoring/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeTest.java - copied unchanged from r1630746, qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeTest.java qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/model/BrokerShutdownProvider.java - copied unchanged from r1630746, qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/BrokerShutdownProvider.java qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/main/java/org/apache/qpid/server/util/PortUtil.java - copied unchanged from r1630746, qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/util/PortUtil.java qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/test/java/org/apache/qpid/server/binding/ - copied from r1630746, qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/binding/ qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImplTest.java - copied unchanged from r1630746, qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImplTest.java qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/test/java/org/apache/qpid/server/model/port/ - copied from r1630746, qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/port/ qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/test/java/org/apache/qpid/server/model/testmodel/TestConfiguredObject.java - copied unchanged from r1630746, qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/testmodel/TestConfiguredObject.java qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/TestLdapDirectoryContext.java - copied unchanged from r1630746, qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/TestLdapDirectoryContext.java qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/AbstractVirtualHostTest.java - copied unchanged from r1630746, qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/virtualhost/AbstractVirtualHostTest.java qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImplTest.java - copied unchanged from r1630746, qpid/trunk/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImplTest.java qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ChannelMethodProcessor.java qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ServerMethodProcessor.java (with props) qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-plugins/management-http/src/main/java/resources/editQueue.html - copied unchanged from r1630746, qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/editQueue.html qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editQueue.js - copied unchanged from r1630746, qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editQueue.js Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/ (props changed) qpid/branches/QPID-6125-ProtocolRefactoring/java/bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/BDBHAMessageStoreManagerMBeanProvider.java qpid/branches/QPID-6125-ProtocolRefactoring/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBSystemConfigImpl.java qpid/branches/QPID-6125-ProtocolRefactoring/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java qpid/branches/QPID-6125-ProtocolRefactoring/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
svn commit: r1630749 [3/6] - in /qpid/branches/QPID-6125-ProtocolRefactoring/java: ./ bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/ bdbstore/src/main/java/org/apache/qpid/ser
Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManagerTest.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManagerTest.java?rev=1630749r1=1630748r2=1630749view=diff == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManagerTest.java (original) +++ qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManagerTest.java Fri Oct 10 09:59:55 2014 @@ -90,31 +90,28 @@ public class PrincipalDatabaseAuthentica private void setupMocks() throws Exception { -_principalDatabase = mock(PrincipalDatabase.class); - - when(_principalDatabase.getMechanisms()).thenReturn(Collections.singletonList(MOCK_MECH_NAME)); -when(_principalDatabase.createSaslServer(MOCK_MECH_NAME, LOCALHOST, null)).thenReturn(new MySaslServer(false, true)); +setUpPrincipalDatabase(); setupManager(false); _manager.initialise(); } +private void setUpPrincipalDatabase() throws SaslException +{ +_principalDatabase = mock(PrincipalDatabase.class); + + when(_principalDatabase.getMechanisms()).thenReturn(Collections.singletonList(MOCK_MECH_NAME)); +when(_principalDatabase.createSaslServer(MOCK_MECH_NAME, LOCALHOST, null)).thenReturn(new MySaslServer(false, true)); +} + private void setupManager(final boolean recovering) { MapString,Object attrs = new HashMapString, Object(); attrs.put(ConfiguredObject.ID, UUID.randomUUID()); attrs.put(ConfiguredObject.NAME, getTestName()); attrs.put(path, _passwordFileLocation); -_manager = new PrincipalDatabaseAuthenticationManager(attrs, BrokerTestHelper.createBrokerMock()) -{ -@Override -protected PrincipalDatabase createDatabase() -{ -return _principalDatabase; -} - -}; +_manager = getPrincipalDatabaseAuthenticationManager(attrs); if(recovering) { _manager.open(); @@ -273,6 +270,41 @@ public class PrincipalDatabaseAuthentica assertFalse(Password file was not deleted, new File(_passwordFileLocation).exists()); } +public void testCreateForInvalidPath() throws Exception +{ +setUpPrincipalDatabase(); + +MapString,Object attrs = new HashMap(); +attrs.put(ConfiguredObject.ID, UUID.randomUUID()); +attrs.put(ConfiguredObject.NAME, getTestName()); +String path = TMP_FOLDER + File.separator + getTestName() + System.nanoTime() + File.separator + users; +attrs.put(path, path); + +_manager = getPrincipalDatabaseAuthenticationManager(attrs); +try +{ +_manager.create(); +fail(Creation with invalid path should have failed); +} +catch(IllegalConfigurationException e) +{ +assertEquals(Unexpected exception message: + e.getMessage(), String.format(Cannot create password file at '%s', path), e.getMessage()); +} +} + +PrincipalDatabaseAuthenticationManager getPrincipalDatabaseAuthenticationManager(final MapString, Object attrs) +{ +return new PrincipalDatabaseAuthenticationManager(attrs, BrokerTestHelper.createBrokerMock()) +{ +@Override +protected PrincipalDatabase createDatabase() +{ +return _principalDatabase; +} + +}; +} + private void deletePasswordFileIfExists() { File passwordFile = new File(_passwordFileLocation); Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerFactoryTest.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerFactoryTest.java?rev=1630749r1=1630748r2=1630749view=diff == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerFactoryTest.java (original) +++ qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerFactoryTest.java Fri Oct 10 09:59:55 2014 @@ -57,40 +57,15 @@ public class
svn commit: r1630749 [4/6] - in /qpid/branches/QPID-6125-ProtocolRefactoring/java: ./ bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/ bdbstore/src/main/java/org/apache/qpid/ser
Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ServerMethodDispatcherImpl.java URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ServerMethodDispatcherImpl.java?rev=1630749r1=1630748r2=1630749view=diff == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ServerMethodDispatcherImpl.java (original) +++ qpid/branches/QPID-6125-ProtocolRefactoring/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ServerMethodDispatcherImpl.java Fri Oct 10 09:59:55 2014 @@ -1,2237 +1,2266 @@ -/* - * - * 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 org.apache.qpid.server.protocol.v0_8; - -import java.security.AccessControlException; -import java.util.Collection; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.UUID; - -import javax.security.sasl.SaslException; -import javax.security.sasl.SaslServer; - -import org.apache.log4j.Logger; - -import org.apache.qpid.AMQConnectionException; -import org.apache.qpid.AMQException; -import org.apache.qpid.exchange.ExchangeDefaults; -import org.apache.qpid.framing.*; -import org.apache.qpid.protocol.AMQConstant; -import org.apache.qpid.server.consumer.ConsumerImpl; -import org.apache.qpid.server.exchange.ExchangeImpl; -import org.apache.qpid.server.filter.AMQInvalidArgumentException; -import org.apache.qpid.server.flow.FlowCreditManager; -import org.apache.qpid.server.flow.MessageOnlyCreditManager; -import org.apache.qpid.server.message.InstanceProperties; -import org.apache.qpid.server.message.MessageDestination; -import org.apache.qpid.server.message.MessageInstance; -import org.apache.qpid.server.message.MessageSource; -import org.apache.qpid.server.message.ServerMessage; -import org.apache.qpid.server.model.Broker; -import org.apache.qpid.server.model.ExclusivityPolicy; -import org.apache.qpid.server.model.LifetimePolicy; -import org.apache.qpid.server.model.NoFactoryForTypeException; -import org.apache.qpid.server.model.Queue; -import org.apache.qpid.server.model.State; -import org.apache.qpid.server.model.UnknownConfiguredObjectException; -import org.apache.qpid.server.model.port.AmqpPort; -import org.apache.qpid.server.protocol.AMQSessionModel; -import org.apache.qpid.server.queue.AMQQueue; -import org.apache.qpid.server.queue.QueueArgumentsConverter; -import org.apache.qpid.server.security.SubjectCreator; -import org.apache.qpid.server.security.auth.SubjectAuthenticationResult; -import org.apache.qpid.server.virtualhost.ExchangeExistsException; -import org.apache.qpid.server.virtualhost.ExchangeIsAlternateException; -import org.apache.qpid.server.virtualhost.QueueExistsException; -import org.apache.qpid.server.virtualhost.RequiredExchangeException; -import org.apache.qpid.server.virtualhost.ReservedExchangeNameException; -import org.apache.qpid.server.virtualhost.VirtualHostImpl; - -public class ServerMethodDispatcherImpl implements MethodDispatcher -{ -private static final Logger _logger = Logger.getLogger(ServerMethodDispatcherImpl.class); - -private final AMQProtocolSession? _connection; - - -public static MethodDispatcher createMethodDispatcher(AMQProtocolSession? connection) -{ -return new ServerMethodDispatcherImpl(connection); -} - - -public ServerMethodDispatcherImpl(AMQProtocolSession? connection) -{ -_connection = connection; -} - - -protected final AMQProtocolSession? getConnection() -{ -return _connection; -} - -public boolean dispatchAccessRequest(AccessRequestBody body, int channelId) throws AMQException -{ -final AMQChannel channel = _connection.getChannel(channelId); -if (channel == null) -{ -throw body.getChannelNotFoundException(channelId, _connection.getMethodRegistry()); -} - -
svn commit: r1630749 [6/6] - in /qpid/branches/QPID-6125-ProtocolRefactoring/java: ./ bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/ bdbstore/src/main/java/org/apache/qpid/ser
Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/perftests/etc/chartdefs/1050-VaryingNumberOfProducerSessionsSingleConnection.chartdef URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/perftests/etc/chartdefs/1050-VaryingNumberOfProducerSessionsSingleConnection.chartdef?rev=1630749r1=1630748r2=1630749view=diff == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/perftests/etc/chartdefs/1050-VaryingNumberOfProducerSessionsSingleConnection.chartdef (original) +++ qpid/branches/QPID-6125-ProtocolRefactoring/java/perftests/etc/chartdefs/1050-VaryingNumberOfProducerSessionsSingleConnection.chartdef Fri Oct 10 09:59:55 2014 @@ -20,7 +20,7 @@ chartType=XYLINE chartTitle=Varying number of producer sessions on single connection chartSubtitle=Persistent messages (1024b) -chartDescription=1-80P transacted on single connection, 20C transacted on separate connections, persistent, message payload 1KB. +chartDescription=1-80P transacted on single connection, 20C transacted on separate connections, persistent, message payload 1KB, single queue. xAxisTitle=Number of producer sessions yAxisTitle=Throughput (KB/s) Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/perftests/etc/chartdefs/1300-QueueConsumersWithNonOverlappingSelectors-Transient.chartdef URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/perftests/etc/chartdefs/1300-QueueConsumersWithNonOverlappingSelectors-Transient.chartdef?rev=1630749r1=1630748r2=1630749view=diff == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/perftests/etc/chartdefs/1300-QueueConsumersWithNonOverlappingSelectors-Transient.chartdef (original) +++ qpid/branches/QPID-6125-ProtocolRefactoring/java/perftests/etc/chartdefs/1300-QueueConsumersWithNonOverlappingSelectors-Transient.chartdef Fri Oct 10 09:59:55 2014 @@ -22,7 +22,7 @@ chartTitle=Impact of non-overlapping sel chartSubtitle=Transient 1KB messages xAxisTitle=Consumers yAxisTitle=Throughput (messages/s) -chartDescription=Impact of non-overlapping selectors on queue consumers with transient messages, auto-ack, message payload of 1024 bytes, 1 producer, varying number of consumers from 1 to 32. +chartDescription=Impact of non-overlapping selectors on queue consumers with transient messages, auto-ack, message payload of 1024 bytes, 1 producer, varying number of consumers from 1 to 32, single queue. series.1.statement=SELECT totalNumberOfConsumers, throughputMessagesPerS FROM QueueConsumersWithNonOverlappingSelectors WHERE participantName = 'All' and testName like '%non overlapping - NON_PERSISTENT%' series.1.legend=Current Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/perftests/etc/chartdefs/1301-QueueConsumersWithNonOverlappingSelectors-Persistent.chartdef URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/perftests/etc/chartdefs/1301-QueueConsumersWithNonOverlappingSelectors-Persistent.chartdef?rev=1630749r1=1630748r2=1630749view=diff == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/perftests/etc/chartdefs/1301-QueueConsumersWithNonOverlappingSelectors-Persistent.chartdef (original) +++ qpid/branches/QPID-6125-ProtocolRefactoring/java/perftests/etc/chartdefs/1301-QueueConsumersWithNonOverlappingSelectors-Persistent.chartdef Fri Oct 10 09:59:55 2014 @@ -22,7 +22,7 @@ chartTitle=Impact of non-overlapping sel chartSubtitle=Persistent 1KB messages xAxisTitle=Consumers yAxisTitle=Throughput (messages/s) -chartDescription=Impact of non-overlapping selectors on queue consumers with persistent messages, auto-ack, message payload of 1024 bytes, 1 producer, varying number of consumers from 1 to 32.. +chartDescription=Impact of non-overlapping selectors on queue consumers with persistent messages, auto-ack, message payload of 1024 bytes, 1 producer, varying number of consumers from 1 to 32, single queue. series.1.statement=SELECT totalNumberOfConsumers, throughputMessagesPerS FROM QueueConsumersWithNonOverlappingSelectors WHERE participantName = 'All' and testName like '%non overlapping - PERSISTENT' Modified: qpid/branches/QPID-6125-ProtocolRefactoring/java/perftests/etc/chartdefs/1302-QueueConsumersWithOverlappingSelectors-Transient.chartdef URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6125-ProtocolRefactoring/java/perftests/etc/chartdefs/1302-QueueConsumersWithOverlappingSelectors-Transient.chartdef?rev=1630749r1=1630748r2=1630749view=diff == --- qpid/branches/QPID-6125-ProtocolRefactoring/java/perftests/etc/chartdefs/1302-QueueConsumersWithOverlappingSelectors-Transient.chartdef (original) +++
svn commit: r1630757 - /qpid/proton/branches/examples/tutorial/
Author: gsim Date: Fri Oct 10 10:48:20 2014 New Revision: 1630757 URL: http://svn.apache.org/r1630757 Log: rename sender()/receiver() as create_sender()/create_receiver() Modified: qpid/proton/branches/examples/tutorial/client.py qpid/proton/branches/examples/tutorial/client_http.py qpid/proton/branches/examples/tutorial/db_recv.py qpid/proton/branches/examples/tutorial/db_send.py qpid/proton/branches/examples/tutorial/helloworld.py qpid/proton/branches/examples/tutorial/helloworld_alt.py qpid/proton/branches/examples/tutorial/helloworld_blocking.py qpid/proton/branches/examples/tutorial/helloworld_direct.py qpid/proton/branches/examples/tutorial/helloworld_direct_alt.py qpid/proton/branches/examples/tutorial/helloworld_direct_tornado.py qpid/proton/branches/examples/tutorial/helloworld_simple.py qpid/proton/branches/examples/tutorial/helloworld_simplistic.py qpid/proton/branches/examples/tutorial/helloworld_tornado.py qpid/proton/branches/examples/tutorial/proton_events.py qpid/proton/branches/examples/tutorial/proton_server.py qpid/proton/branches/examples/tutorial/server.py qpid/proton/branches/examples/tutorial/simple_recv.py qpid/proton/branches/examples/tutorial/simple_send.py qpid/proton/branches/examples/tutorial/sync_client.py Modified: qpid/proton/branches/examples/tutorial/client.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/tutorial/client.py?rev=1630757r1=1630756r2=1630757view=diff == --- qpid/proton/branches/examples/tutorial/client.py (original) +++ qpid/proton/branches/examples/tutorial/client.py Fri Oct 10 10:48:20 2014 @@ -25,8 +25,8 @@ class Client(IncomingMessageHandler): def __init__(self, eventloop, host, address, requests): self.eventloop = eventloop self.conn = eventloop.connect(host) -self.sender = self.conn.sender(address) -self.receiver = self.conn.receiver(None, dynamic=True, handler=self) +self.sender = self.conn.create_sender(address) +self.receiver = self.conn.create_receiver(None, dynamic=True, handler=self) self.requests = requests def next_request(self): Modified: qpid/proton/branches/examples/tutorial/client_http.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/tutorial/client_http.py?rev=1630757r1=1630756r2=1630757view=diff == --- qpid/proton/branches/examples/tutorial/client_http.py (original) +++ qpid/proton/branches/examples/tutorial/client_http.py Fri Oct 10 10:48:20 2014 @@ -36,8 +36,8 @@ class ExampleHandler(tornado.web.Request @tornado.web.asynchronous def post(self): self.conn = self.loop.connect(localhost:5672) -self.sender = self.conn.sender(examples) -self.conn.receiver(None, dynamic=True, handler=self) +self.sender = self.conn.create_sender(examples) +self.conn.create_receiver(None, dynamic=True, handler=self) def on_link_open(self, event): req = Message(reply_to=event.link.remote_source.address, body=self.get_body_argument(message)) Modified: qpid/proton/branches/examples/tutorial/db_recv.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/tutorial/db_recv.py?rev=1630757r1=1630756r2=1630757view=diff == --- qpid/proton/branches/examples/tutorial/db_recv.py (original) +++ qpid/proton/branches/examples/tutorial/db_recv.py Fri Oct 10 10:48:20 2014 @@ -31,7 +31,7 @@ class Recv(BaseHandler): # TODO: load last tag from db self.last_id = None self.conn = self.eventloop.connect(self.host, handler=self) -self.conn.receiver(self.address) +self.conn.create_receiver(self.address) def auto_accept(self): return False Modified: qpid/proton/branches/examples/tutorial/db_send.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/tutorial/db_send.py?rev=1630757r1=1630756r2=1630757view=diff == --- qpid/proton/branches/examples/tutorial/db_send.py (original) +++ qpid/proton/branches/examples/tutorial/db_send.py Fri Oct 10 10:48:20 2014 @@ -34,7 +34,7 @@ class Send(BaseHandler): self.records = Queue.Queue(maxsize=50) self.db = Db(src_db, self.eventloop.get_event_trigger()) self.conn = self.eventloop.connect(self.host, handler=self) -self.sender = self.conn.sender(self.address) +self.sender = self.conn.create_sender(self.address) def on_records_loaded(self, event): if self.records.empty() and event.subject == self.sent: Modified: qpid/proton/branches/examples/tutorial/helloworld.py URL:
[3/4] git commit: Make new facades have an empty data section, as the copy being sent always does. Add additional tests around copy.
Make new facades have an empty data section, as the copy being sent always does. Add additional tests around copy. Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/27b9b283 Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/27b9b283 Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/27b9b283 Branch: refs/heads/master Commit: 27b9b283f63af6534ae2df03b1ae920434112bdc Parents: c4690c4 Author: Robert Gemmell rob...@apache.org Authored: Fri Oct 10 11:44:57 2014 +0100 Committer: Robert Gemmell rob...@apache.org Committed: Fri Oct 10 11:46:01 2014 +0100 -- .../amqp/message/AmqpJmsBytesMessageFacade.java | 9 ++- .../message/AmqpJmsBytesMessageFacadeTest.java | 58 +--- 2 files changed, 58 insertions(+), 9 deletions(-) -- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/27b9b283/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java -- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java index 553a044..1fe5e26 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java @@ -62,6 +62,7 @@ public class AmqpJmsBytesMessageFacade extends AmqpJmsMessageFacade implements J super(connection); setContentType(OCTET_STREAM_CONTENT_TYPE); setMessageAnnotation(JMS_MSG_TYPE, JMS_BYTES_MESSAGE); +getAmqpMessage().setBody(EMPTY_BODY); } /** @@ -84,7 +85,7 @@ public class AmqpJmsBytesMessageFacade extends AmqpJmsMessageFacade implements J copyInto(copy); Binary payload = getBinaryFromBody(); -if (payload != null payload.getLength() 0) { +if (payload.getLength() 0) { byte[] result = new byte[payload.getLength()]; System.arraycopy(payload.getArray(), payload.getArrayOffset(), result, 0, payload.getLength()); copy.message.setBody(new Data(new Binary(result))); @@ -182,6 +183,12 @@ public class AmqpJmsBytesMessageFacade extends AmqpJmsMessageFacade implements J return getBinaryFromBody().getLength(); } +/** + * Get the underlying Binary object from the body, or + * {@link EMPTY_BINARY} if there is none. Never returns null. + * + * @return the body binary, or empty substitute if there is none + */ private Binary getBinaryFromBody() { Section body = getAmqpMessage().getBody(); Binary result = EMPTY_BINARY; http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/27b9b283/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java -- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java index 6bcf777..6199917 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java @@ -22,6 +22,7 @@ import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.getSy import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -85,15 +86,11 @@ public class AmqpJmsBytesMessageFacadeTest extends AmqpJmsMessageTypesTestCase { } @Test -public void testNewMessageHasContentTypeButNoBodySection() throws Exception { -// TODO: this test assumes we can omit the body section. If we decide otherwise -// it should instead check for e.g. a data section containing 0 length binary +public void testNewMessageHasContentType() throws Exception { AmqpJmsBytesMessageFacade amqpBytesMessageFacade = createNewBytesMessageFacade(); Message protonMessage = amqpBytesMessageFacade.getAmqpMessage(); assertNotNull(protonMessage); -assertNull(protonMessage.getBody()); - String contentType = protonMessage.getContentType(); assertNotNull(content type should be set, contentType); assertEquals(application/octet-stream,
[1/4] git commit: remove testonly setBody method, update tests accordingly
Repository: qpid-jms Updated Branches: refs/heads/master e85c74b46 - a6d04de00 remove testonly setBody method, update tests accordingly Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/1794cbbf Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/1794cbbf Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/1794cbbf Branch: refs/heads/master Commit: 1794cbbf2d767b8ca30ca6f0374b0032f92f7cf5 Parents: e85c74b Author: Robert Gemmell rob...@apache.org Authored: Fri Oct 10 10:43:02 2014 +0100 Committer: Robert Gemmell rob...@apache.org Committed: Fri Oct 10 10:43:02 2014 +0100 -- .../message/facade/JmsBytesMessageFacade.java | 13 -- .../amqp/message/AmqpJmsBytesMessageFacade.java | 15 --- .../qpid/jms/message/JmsBytesMessageTest.java | 21 +-- .../defaults/JmsDefaultBytesMessageFacade.java | 16 +-- .../message/AmqpJmsBytesMessageFacadeTest.java | 127 +++ 5 files changed, 60 insertions(+), 132 deletions(-) -- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/1794cbbf/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/JmsBytesMessageFacade.java -- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/JmsBytesMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/JmsBytesMessageFacade.java index b5ee153..ecb59c1 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/JmsBytesMessageFacade.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/JmsBytesMessageFacade.java @@ -86,17 +86,4 @@ public interface JmsBytesMessageFacade extends JmsMessageFacade { * @return the number of bytes contained in the body of the message. */ int getBodyLength(); - -/** - * Sets the contents of the message from the given byte[] the given bytes are - * copied into the body of the message. Any previous message body content is - * discarded. - * - * @param content - *the new bytes to store in this message. - * - * @throws JMSException if an error occurs accessing the message body. - */ -void setBody(byte[] content) throws JMSException; - } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/1794cbbf/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java -- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java index 4207439..9438413 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java @@ -129,21 +129,6 @@ public class AmqpJmsBytesMessageFacade extends AmqpJmsMessageFacade implements J } @Override -public void setBody(byte[] content) throws JMSException { -if (bytesIn != null || bytesOut != null) { -throw new JMSException(Body cannot be read until message is reset()); -} - -Data body = EMPTY_DATA; -if (content != null) { -byte[] copy = Arrays.copyOf(content, content.length); -body = new Data(new Binary(copy, 0, copy.length)); -} - -getAmqpMessage().setBody(body); -} - -@Override public InputStream getInputStream() throws JMSException { if (bytesOut != null) { throw new IllegalStateException(Body is being written to, cannot perform a read.); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/1794cbbf/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java -- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java index e672ee3..4420832 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java @@ -82,8 +82,7 @@ public class JmsBytesMessageTest { @Test public void testReadBytesUsingReceivedMessageWithBodyReturnsBytes() throws Exception { byte[] content = myBytesData.getBytes(); -JmsDefaultBytesMessageFacade facade = new JmsDefaultBytesMessageFacade(); -facade.setBody(content); +JmsDefaultBytesMessageFacade facade = new
[2/4] git commit: rename for clarity
rename for clarity Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/c4690c48 Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/c4690c48 Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/c4690c48 Branch: refs/heads/master Commit: c4690c486fc99e8a204d17420e61cb38a583178e Parents: 1794cbb Author: Robert Gemmell rob...@apache.org Authored: Fri Oct 10 11:18:45 2014 +0100 Committer: Robert Gemmell rob...@apache.org Committed: Fri Oct 10 11:18:45 2014 +0100 -- .../amqp/message/AmqpJmsBytesMessageFacade.java| 13 ++--- 1 file changed, 6 insertions(+), 7 deletions(-) -- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/c4690c48/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java -- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java index 9438413..553a044 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java @@ -27,7 +27,6 @@ import io.netty.buffer.Unpooled; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.util.Arrays; import javax.jms.IllegalStateException; import javax.jms.JMSException; @@ -47,8 +46,8 @@ import org.apache.qpid.proton.message.Message; */ public class AmqpJmsBytesMessageFacade extends AmqpJmsMessageFacade implements JmsBytesMessageFacade { -private static final Binary EMPTY_BODY = new Binary(new byte[0]); -private static final Data EMPTY_DATA = new Data(EMPTY_BODY); +private static final Binary EMPTY_BINARY = new Binary(new byte[0]); +private static final Data EMPTY_BODY = new Data(EMPTY_BINARY); private transient ByteBufInputStream bytesIn; private transient ByteBufOutputStream bytesOut; @@ -90,7 +89,7 @@ public class AmqpJmsBytesMessageFacade extends AmqpJmsMessageFacade implements J System.arraycopy(payload.getArray(), payload.getArrayOffset(), result, 0, payload.getLength()); copy.message.setBody(new Data(new Binary(result))); } else { -copy.message.setBody(EMPTY_DATA); +copy.message.setBody(EMPTY_BODY); } return copy; @@ -125,7 +124,7 @@ public class AmqpJmsBytesMessageFacade extends AmqpJmsMessageFacade implements J bytesOut = null; } -message.setBody(EMPTY_DATA); +message.setBody(EMPTY_BODY); } @Override @@ -152,7 +151,7 @@ public class AmqpJmsBytesMessageFacade extends AmqpJmsMessageFacade implements J if (bytesOut == null) { bytesOut = new ByteBufOutputStream(Unpooled.buffer()); -message.setBody(EMPTY_DATA); +message.setBody(EMPTY_BODY); } return bytesOut; @@ -185,7 +184,7 @@ public class AmqpJmsBytesMessageFacade extends AmqpJmsMessageFacade implements J private Binary getBinaryFromBody() { Section body = getAmqpMessage().getBody(); -Binary result = EMPTY_BODY; +Binary result = EMPTY_BINARY; if (body == null) { return result; - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
[4/4] git commit: test input/output stream state checking
test input/output stream state checking Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/a6d04de0 Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/a6d04de0 Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/a6d04de0 Branch: refs/heads/master Commit: a6d04de00ea4643d52050170ee001c9272269a1b Parents: 27b9b28 Author: Robert Gemmell rob...@apache.org Authored: Fri Oct 10 11:55:18 2014 +0100 Committer: Robert Gemmell rob...@apache.org Committed: Fri Oct 10 11:55:18 2014 +0100 -- .../message/AmqpJmsBytesMessageFacadeTest.java | 27 +++- 1 file changed, 26 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/a6d04de0/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java -- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java index 6199917..b07ba29 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java @@ -21,7 +21,6 @@ import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_M import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.getSymbol; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -219,6 +218,32 @@ public class AmqpJmsBytesMessageFacadeTest extends AmqpJmsMessageTypesTestCase { assertDataBodyAsExpected(amqpBytesMessageFacade.getAmqpMessage(), 0); } +@Test +public void testGetInputStreamThrowsJMSISEWhenFacadeBeingWrittenTo() throws Exception { +AmqpJmsBytesMessageFacade amqpBytesMessageFacade = createNewBytesMessageFacade(); + +amqpBytesMessageFacade.getOutputStream(); +try { +amqpBytesMessageFacade.getInputStream(); +fail(expected exception not thrown); +} catch (javax.jms.IllegalStateException ise) { +// expected +} +} + +@Test +public void testGetOutputStreamThrowsJMSISEWhenFacadeBeingReadFrom() throws Exception { +AmqpJmsBytesMessageFacade amqpBytesMessageFacade = createNewBytesMessageFacade(); + +amqpBytesMessageFacade.getInputStream(); +try { +amqpBytesMessageFacade.getOutputStream(); +fail(expected exception not thrown); +} catch (javax.jms.IllegalStateException ise) { +// expected +} +} + // -- test handling of received messages -// @Test - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630766 - in /qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl: MessageConsumerImpl.java SessionImpl.java
Author: rgodfrey Date: Fri Oct 10 11:43:50 2014 New Revision: 1630766 URL: http://svn.apache.org/r1630766 Log: QPID-6141 : Fix recover() for onMessage client-ack sessions Modified: qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/MessageConsumerImpl.java qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java Modified: qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/MessageConsumerImpl.java URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/MessageConsumerImpl.java?rev=1630766r1=1630765r2=1630766view=diff == --- qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/MessageConsumerImpl.java (original) +++ qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/MessageConsumerImpl.java Fri Oct 10 11:43:50 2014 @@ -300,6 +300,12 @@ public class MessageConsumerImpl impleme } } +Message receiveRecoveredMessage() +{ +return _replaymessages.isEmpty() ? null : _replaymessages.remove(0); + +} + Message receive0(final long timeout) { Modified: qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java?rev=1630766r1=1630765r2=1630766view=diff == --- qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java (original) +++ qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java Fri Oct 10 11:43:50 2014 @@ -922,7 +922,15 @@ public class SessionImpl implements Sess else { consumer = _messageConsumerList.remove(0); -msg = consumer.receive0(0L); +msg = consumer.receiveRecoveredMessage(); +if(msg == null) +{ +msg = consumer.receive0(0L); +} +else +{ +recoveredMessage = true; +} } MessageListener listener = consumer._messageListener; - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
[1/2] git commit: simplify setting the encoding method and ensure it is a no-op if the method is unchanged
Repository: qpid-jms Updated Branches: refs/heads/master a6d04de00 - 5c46a63c3 simplify setting the encoding method and ensure it is a no-op if the method is unchanged Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/8aa3d4d9 Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/8aa3d4d9 Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/8aa3d4d9 Branch: refs/heads/master Commit: 8aa3d4d9824069a1e904a70268793126caffb4bc Parents: a6d04de Author: Robert Gemmell rob...@apache.org Authored: Fri Oct 10 12:36:15 2014 +0100 Committer: Robert Gemmell rob...@apache.org Committed: Fri Oct 10 12:36:15 2014 +0100 -- .../message/AmqpJmsObjectMessageFacade.java | 25 ++-- .../amqp/message/AmqpObjectTypeDelegate.java| 1 + .../message/AmqpSerializedObjectDelegate.java | 5 .../amqp/message/AmqpTypedObjectDelegate.java | 5 4 files changed, 24 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/8aa3d4d9/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacade.java -- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacade.java index 894ff3a..4c18f7e 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacade.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacade.java @@ -126,22 +126,23 @@ public class AmqpJmsObjectMessageFacade extends AmqpJmsMessageFacade implements } void setUseAmqpTypedEncoding(boolean useAmqpTypedEncoding) throws JMSException { -if (useAmqpTypedEncoding delegate instanceof AmqpSerializedObjectDelegate) { -AmqpTypedObjectDelegate newDelegate = new AmqpTypedObjectDelegate(message); +if (useAmqpTypedEncoding != delegate.isAmqpTypeEncoded()) { try { -newDelegate.setObject(delegate.getObject()); -} catch (ClassNotFoundException | IOException e) { -throw JmsExceptionSupport.create(e); -} -delegate = newDelegate; -} else if (delegate instanceof AmqpTypedObjectDelegate) { -AmqpSerializedObjectDelegate newDelegate = new AmqpSerializedObjectDelegate(message); -try { -newDelegate.setObject(delegate.getObject()); +Serializable existingObject = delegate.getObject(); + +AmqpObjectTypeDelegate newDelegate = null; +if (useAmqpTypedEncoding) { +newDelegate = new AmqpTypedObjectDelegate(message); +} else { +newDelegate = new AmqpSerializedObjectDelegate(message); +} + +newDelegate.setObject(existingObject); + +delegate = newDelegate; } catch (ClassNotFoundException | IOException e) { throw JmsExceptionSupport.create(e); } -delegate = newDelegate; } } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/8aa3d4d9/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpObjectTypeDelegate.java -- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpObjectTypeDelegate.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpObjectTypeDelegate.java index cec37f0..fb74e68 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpObjectTypeDelegate.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpObjectTypeDelegate.java @@ -53,4 +53,5 @@ public interface AmqpObjectTypeDelegate { */ void onSend(); +boolean isAmqpTypeEncoded(); } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/8aa3d4d9/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpSerializedObjectDelegate.java -- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpSerializedObjectDelegate.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpSerializedObjectDelegate.java index d22d23a..647286e 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpSerializedObjectDelegate.java +++
[2/2] git commit: start on unit tests for AmqpJmsObjectMessageFacade
start on unit tests for AmqpJmsObjectMessageFacade Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/5c46a63c Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/5c46a63c Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/5c46a63c Branch: refs/heads/master Commit: 5c46a63c38f8404fcb0dc5607baf690b0edacae1 Parents: 8aa3d4d Author: Robert Gemmell rob...@apache.org Authored: Fri Oct 10 12:54:15 2014 +0100 Committer: Robert Gemmell rob...@apache.org Committed: Fri Oct 10 12:54:15 2014 +0100 -- .../message/AmqpJmsMessageTypesTestCase.java| 8 ++ .../message/AmqpJmsObjectMessageFacadeTest.java | 84 2 files changed, 92 insertions(+) -- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/5c46a63c/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageTypesTestCase.java -- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageTypesTestCase.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageTypesTestCase.java index a39afcd..8ad585f 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageTypesTestCase.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageTypesTestCase.java @@ -78,6 +78,14 @@ public class AmqpJmsMessageTypesTestCase extends QpidJmsTestCase { return new AmqpJmsStreamMessageFacade(amqpConsumer, message); } +protected AmqpJmsObjectMessageFacade createNewObjectMessageFacade(boolean javaSerialized) { +return new AmqpJmsObjectMessageFacade(createMockAmqpConnection(), javaSerialized); +} + +protected AmqpJmsObjectMessageFacade createReceivedObjectMessageFacade(AmqpConsumer amqpConsumer, Message message) { +return new AmqpJmsObjectMessageFacade(amqpConsumer, message); +} + protected AmqpConsumer createMockAmqpConsumer() { AmqpConsumer consumer = Mockito.mock(AmqpConsumer.class); Mockito.when(consumer.getConnection()).thenReturn(createMockAmqpConnection()); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/5c46a63c/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacadeTest.java -- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacadeTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacadeTest.java new file mode 100644 index 000..4b3e422 --- /dev/null +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacadeTest.java @@ -0,0 +1,84 @@ +/** + * 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 org.apache.qpid.jms.provider.amqp.message; + +import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_MSG_TYPE; +import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_OBJECT_MESSAGE; +import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.getSymbol; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.Map; + +import org.apache.qpid.proton.amqp.Symbol; +import org.apache.qpid.proton.amqp.messaging.MessageAnnotations; +import org.apache.qpid.proton.message.Message; +import org.junit.Test; + +/** + * Tests for class AmqpJmsObjectMessageFacade + */ +public class AmqpJmsObjectMessageFacadeTest extends AmqpJmsMessageTypesTestCase { + +// -- Test initial state of newly created message -// + +@Test +public void testNewMessageToSendContainsMessageTypeAnnotation() throws Exception { +AmqpJmsObjectMessageFacade amqpObjectMessageFacade =
svn commit: r1630776 - in /qpid/proton/branches/examples/proton-j/src/main: java/org/apache/qpid/proton/engine/ java/org/apache/qpid/proton/engine/impl/ resources/
Author: gsim Date: Fri Oct 10 12:36:44 2014 New Revision: 1630776 URL: http://svn.apache.org/r1630776 Log: added simple trace API to proton-j Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameWriter.java qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SaslImpl.java qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java qpid/proton/branches/examples/proton-j/src/main/resources/cengine.py Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java?rev=1630776r1=1630775r2=1630776view=diff == --- qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java (original) +++ qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java Fri Oct 10 12:36:44 2014 @@ -73,6 +73,11 @@ public interface Transport extends Endpo } } +public static final int TRACE_OFF = 0; +public static final int TRACE_RAW = 1; +public static final int TRACE_FRM = 2; +public static final int TRACE_DRV = 4; + public static final int DEFAULT_MAX_FRAME_SIZE = -1; /** the lower bound for the agreed maximum frame size (in bytes). */ @@ -80,6 +85,8 @@ public interface Transport extends Endpo public int SESSION_WINDOW = 16*1024; public int END_OF_STREAM = -1; +public void trace(int levels); + public void bind(Connection connection); public void unbind(); Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameWriter.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameWriter.java?rev=1630776r1=1630775r2=1630776view=diff == --- qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameWriter.java (original) +++ qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameWriter.java Fri Oct 10 12:36:44 2014 @@ -46,14 +46,14 @@ class FrameWriter private int _maxFrameSize; private byte _frameType; final private RefProtocolTracer _protocolTracer; -private Object _logCtx; +private TransportImpl _transport; private int _frameStart = 0; private int _payloadStart; private int _performativeSize; FrameWriter(EncoderImpl encoder, int maxFrameSize, byte frameType, -RefProtocolTracer protocolTracer, Object logCtx) +RefProtocolTracer protocolTracer, TransportImpl transport) { _encoder = encoder; _bbuf = ByteBuffer.allocate(1024); @@ -62,7 +62,7 @@ class FrameWriter _maxFrameSize = maxFrameSize; _frameType = frameType; _protocolTracer = protocolTracer; -_logCtx = logCtx; +_transport = transport; } void setMaxFrameSize(int maxFrameSize) @@ -155,7 +155,7 @@ class FrameWriter // code, further refactor will fix this if (_frameType == AMQP_FRAME_TYPE) { TransportFrame frame = new TransportFrame(channel, (FrameBody) frameBody, Binary.create(originalPayload)); -TransportImpl.log(_logCtx, TransportImpl.OUTGOING, frame); +_transport.log(TransportImpl.OUTGOING, frame); ProtocolTracer tracer = _protocolTracer.get(); if(tracer != null) Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SaslImpl.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SaslImpl.java?rev=1630776r1=1630775r2=1630776view=diff == --- qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SaslImpl.java (original) +++ qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SaslImpl.java Fri Oct 10 12:36:44 2014 @@ -54,6 +54,8 @@ public class SaslImpl implements Sasl, S private final DecoderImpl _decoder = new DecoderImpl(); private final EncoderImpl _encoder = new EncoderImpl(_decoder); +private final TransportImpl _transport; + private boolean _tail_closed = false; private final ByteBuffer _inputBuffer; private boolean _head_closed = false; @@ -87,14 +89,15 @@ public class SaslImpl implements Sasl, S * returned by {@link
svn commit: r1630775 - /qpid/proton/branches/examples/proton-c/bindings/python/proton.py
Author: gsim Date: Fri Oct 10 12:36:31 2014 New Revision: 1630775 URL: http://svn.apache.org/r1630775 Log: added missing TRACE_OFF level Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630775r1=1630774r2=1630775view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:36:31 2014 @@ -2962,6 +2962,7 @@ class TransportException(ProtonException class Transport(object): + TRACE_OFF = PN_TRACE_OFF TRACE_DRV = PN_TRACE_DRV TRACE_FRM = PN_TRACE_FRM TRACE_RAW = PN_TRACE_RAW - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630778 - in /qpid/proton/branches/examples/proton-c/src: ssl/openssl.c transport/transport.c
Author: gsim Date: Fri Oct 10 12:36:59 2014 New Revision: 1630778 URL: http://svn.apache.org/r1630778 Log: PROTON-611: Don't allocate frame_max bytes immediately, grow by factors of 2 until you get to the max - else a large frame size can blow away 4Gb of memory! Modified: qpid/proton/branches/examples/proton-c/src/ssl/openssl.c qpid/proton/branches/examples/proton-c/src/transport/transport.c Modified: qpid/proton/branches/examples/proton-c/src/ssl/openssl.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/ssl/openssl.c?rev=1630778r1=1630777r2=1630778view=diff == --- qpid/proton/branches/examples/proton-c/src/ssl/openssl.c (original) +++ qpid/proton/branches/examples/proton-c/src/ssl/openssl.c Fri Oct 10 12:36:59 2014 @@ -908,14 +908,13 @@ static ssize_t process_input_ssl( pn_io_ if (!max_frame) max_frame = ssl-in_size * 2; // no limit if (ssl-in_size max_frame) { // no max frame limit - grow it. - char *newbuf = (char *)malloc( max_frame ); + size_t newsize = pn_min(max_frame, ssl-in_size * 2); + char *newbuf = (char *)realloc( ssl-inbuf, newsize ); if (newbuf) { -ssl-in_size = max_frame; -memmove( newbuf, ssl-inbuf, ssl-in_count ); -free( ssl-inbuf ); +ssl-in_size = newsize; ssl-inbuf = newbuf; +work_pending = true; // can we get more input? } - work_pending = true; // can we get more input? } else { // can't gather any more input, but app needs more? // This is a bug - since SSL can buffer up to max-frame, Modified: qpid/proton/branches/examples/proton-c/src/transport/transport.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/transport/transport.c?rev=1630778r1=1630777r2=1630778view=diff == --- qpid/proton/branches/examples/proton-c/src/transport/transport.c (original) +++ qpid/proton/branches/examples/proton-c/src/transport/transport.c Fri Oct 10 12:36:59 2014 @@ -1740,20 +1740,18 @@ static ssize_t transport_produce(pn_tran pn_io_layer_t *io_layer = transport-io_layers; ssize_t space = transport-output_size - transport-output_pending; - if (space == 0) { // can we expand the buffer? + if (space = 0) { // can we expand the buffer? int more = 0; if (!transport-remote_max_frame) // no limit, so double it more = transport-output_size; else if (transport-remote_max_frame transport-output_size) - more = transport-remote_max_frame - transport-output_size; + more = pn_min(transport-output_size, transport-remote_max_frame - transport-output_size); if (more) { - char *newbuf = (char *)malloc( transport-output_size + more ); + char *newbuf = (char *)realloc( transport-output_buf, transport-output_size + more ); if (newbuf) { -memmove( newbuf, transport-output_buf, transport-output_pending ); -free( transport-output_buf ); transport-output_buf = newbuf; transport-output_size += more; -space = more; +space += more; } } } @@ -1955,22 +1953,20 @@ ssize_t pn_transport_capacity(pn_transpo //if (pn_error_code(transport-error)) return pn_error_code(transport-error); ssize_t capacity = transport-input_size - transport-input_pending; - if (!capacity) { + if ( capacity=0 ) { // can we expand the size of the input buffer? int more = 0; if (!transport-local_max_frame) { // no limit (ha!) more = transport-input_size; } else if (transport-local_max_frame transport-input_size) { - more = transport-local_max_frame - transport-input_size; + more = pn_min(transport-input_size, transport-local_max_frame - transport-input_size); } if (more) { - char *newbuf = (char *) malloc( transport-input_size + more ); + char *newbuf = (char *) realloc( transport-input_buf, transport-input_size + more ); if (newbuf) { -memmove( newbuf, transport-input_buf, transport-input_pending ); -free( transport-input_buf ); transport-input_buf = newbuf; transport-input_size += more; -capacity = more; +capacity += more; } } } - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630777 - /qpid/proton/branches/examples/CMakeLists.txt
Author: gsim Date: Fri Oct 10 12:36:53 2014 New Revision: 1630777 URL: http://svn.apache.org/r1630777 Log: NO-JIRA: Set default build type to RelWithDebInfo. Modified: qpid/proton/branches/examples/CMakeLists.txt Modified: qpid/proton/branches/examples/CMakeLists.txt URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/CMakeLists.txt?rev=1630777r1=1630776r2=1630777view=diff == --- qpid/proton/branches/examples/CMakeLists.txt (original) +++ qpid/proton/branches/examples/CMakeLists.txt Fri Oct 10 12:36:53 2014 @@ -18,6 +18,14 @@ # cmake_minimum_required (VERSION 2.6) +# Set default build type. Must come before project() which sets default to +set (CMAKE_BUILD_TYPE RelWithDebInfo CACHE string + Build type: Debug, Release, RelWithDebInfo or MinSizeRel (default RelWithDebInfo)) +if (CMAKE_BUILD_TYPE MATCHES Deb) + set (has_debug_symbols (has debug symbols)) +endif (CMAKE_BUILD_TYPE MATCHES Deb) +message(Build type is \${CMAKE_BUILD_TYPE}\${has_debug_symbols}) + option(BUILD_WITH_CXX Compile Proton using C++ OFF) if (${CMAKE_GENERATOR} MATCHES ^Visual Studio) # No C99 capability, use C++ - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630779 - in /qpid/proton/branches/examples/proton-c/src/dispatcher: dispatcher.c dispatcher.h
Author: gsim Date: Fri Oct 10 12:37:04 2014 New Revision: 1630779 URL: http://svn.apache.org/r1630779 Log: NO-JIRA: Remove unused struct members Modified: qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.c qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.h Modified: qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.c?rev=1630779r1=1630778r2=1630779view=diff == --- qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.c (original) +++ qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.c Fri Oct 10 12:37:04 2014 @@ -75,9 +75,6 @@ pn_dispatcher_t *pn_dispatcher(uint8_t f (pn_env_bool(PN_TRACE_FRM) ? PN_TRACE_FRM : PN_TRACE_OFF) | (pn_env_bool(PN_TRACE_DRV) ? PN_TRACE_DRV : PN_TRACE_OFF); - disp-input = pn_buffer(1024); - disp-fragment = 0; - disp-channel = 0; disp-args = pn_data(16); disp-payload = NULL; @@ -101,7 +98,6 @@ pn_dispatcher_t *pn_dispatcher(uint8_t f void pn_dispatcher_free(pn_dispatcher_t *disp) { if (disp) { -pn_buffer_free(disp-input); pn_data_free(disp-args); pn_data_free(disp-output_args); pn_buffer_free(disp-frame); Modified: qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.h?rev=1630779r1=1630778r2=1630779view=diff == --- qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.h (original) +++ qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.h Fri Oct 10 12:37:04 2014 @@ -34,8 +34,6 @@ typedef struct pn_dispatcher_t pn_dispat typedef int (pn_action_t)(pn_dispatcher_t *disp); struct pn_dispatcher_t { - pn_buffer_t *input; - size_t fragment; pn_data_t *args; const char *payload; size_t size; - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630780 - in /qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine: Event.java impl/EventImpl.java
Author: gsim Date: Fri Oct 10 12:37:17 2014 New Revision: 1630780 URL: http://svn.apache.org/r1630780 Log: PROTON-647: add method to copy an Event before use of the Collector pop() reclaims it to the pool Applied patch from Clebert Suconic Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java?rev=1630780r1=1630779r2=1630780view=diff == --- qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java (original) +++ qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java Fri Oct 10 12:37:17 2014 @@ -91,4 +91,6 @@ public interface Event Transport getTransport(); +Event copy(); + } Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java?rev=1630780r1=1630779r2=1630780view=diff == --- qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java (original) +++ qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java Fri Oct 10 12:37:17 2014 @@ -138,6 +138,12 @@ class EventImpl implements Event return null; } } +public Event copy() +{ + EventImpl newEvent = new EventImpl(); + newEvent.init(type, context); + return newEvent; +} @Override public String toString() - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630783 - in /qpid/proton/branches/examples: examples/messenger/perl/ proton-c/bindings/perl/lib/ proton-c/bindings/perl/lib/qpid/proton/
Author: gsim Date: Fri Oct 10 12:38:26 2014 New Revision: 1630783 URL: http://svn.apache.org/r1630783 Log: PROTON-582: Perl Message can infer the type of the content provided. The qpid::proton::Message-set_body() method can take either a single argument (the body) or two arguments (the body and an explicit type). Previous, if the second argument wasn't provided, the code assumed it was a qpid::message::STRING type. Now, the code will attempt to determine the type of the argument. It can successfully infer a hash, array, int and string. It will default to a string if it cannot otherwise determine the type. Modified: qpid/proton/branches/examples/examples/messenger/perl/recv.pl qpid/proton/branches/examples/examples/messenger/perl/send.pl qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Data.pm qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Message.pm qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid_proton.pm Modified: qpid/proton/branches/examples/examples/messenger/perl/recv.pl URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/examples/messenger/perl/recv.pl?rev=1630783r1=1630782r2=1630783view=diff == --- qpid/proton/branches/examples/examples/messenger/perl/recv.pl (original) +++ qpid/proton/branches/examples/examples/messenger/perl/recv.pl Fri Oct 10 12:38:26 2014 @@ -51,21 +51,28 @@ for(;;) { $messenger-get($msg); +print \n; print Address: . $msg-get_address() . \n; print Subject: . $msg-get_subject() . \n unless !defined($msg-get_subject()); print Body:; my $body = $msg-get_body(); -my $body_type = reftype($body); +my $body_type = $msg-get_body_type(); if (!defined($body_type)) { -print $body\n; -} elsif ($body_type eq HASH) { +print The body type wasn't defined!\n; +} elsif ($body_type == qpid::proton::MAP) { print [HASH]\n; print Dumper(\%{$body}) . \n; -} elsif ($body_type eq ARRAY) { +} elsif ($body_type == qpid::proton::ARRAY) { print [ARRAY]\n; print Data::Dumper-Dump($body) . \n; +} elsif ($body_type == qpid::proton::LIST) { +print [LIST]\n; +print Data::Dumper-Dump($body) . \n; +} else { +print [$body_type]\n; +print $body\n; } print Properties:\n; Modified: qpid/proton/branches/examples/examples/messenger/perl/send.pl URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/examples/messenger/perl/send.pl?rev=1630783r1=1630782r2=1630783view=diff == --- qpid/proton/branches/examples/examples/messenger/perl/send.pl (original) +++ qpid/proton/branches/examples/examples/messenger/perl/send.pl Fri Oct 10 12:38:26 2014 @@ -61,7 +61,7 @@ foreach (@messages) $msg-set_subject($subject); $msg-set_content($content); # try a few different body types -my $body_type = int(rand(4)); +my $body_type = int(rand(6)); $msg-set_property(sent, . localtime(time)); $msg-get_instructions-{fold} = yes; $msg-get_instructions-{spindle} = no; @@ -71,12 +71,15 @@ foreach (@messages) SWITCH: { $body_type == 0 do { $msg-set_body(It is now . localtime(time));}; - $body_type == 1 do { $msg-set_body(rand(65536), qpid::proton::FLOAT); }; + $body_type == 1 do { $msg-set_body(rand(65536)); }; $body_type == 2 do { $msg-set_body(int(rand(2)), qpid::proton::BOOL); }; - $body_type == 3 do { $msg-set_body({foo = bar}, qpid::proton::MAP); }; + $body_type == 3 do { $msg-set_body({foo = bar}); }; + $body_type == 4 do { $msg-set_body([4, [1, 2, 3.1, 3.4E-5], 8, 15, 16, 23, 42]); }; + $body_type == 5 do { $msg-set_body(int(rand(65535))); } } $messenger-put($msg); +print Sent: . $msg-get_body . [CONTENT TYPE: . $msg-get_body_type . ]\n; } $messenger-send(); Modified: qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Data.pm URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Data.pm?rev=1630783r1=1630782r2=1630783view=diff == --- qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Data.pm (original) +++ qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Data.pm Fri Oct 10 12:38:26 2014 @@ -1166,16 +1166,23 @@ sub put_list_helper { $self-put_list; $self-enter; -foreach(@{$array}) { -my $value = $_; -my $valtype = ::reftype($value); - -if ($valtype eq ARRAY) { -$self-put_list_helper($value); -} elsif ($valtype eq HASH) { +for my $value
svn commit: r1630784 - in /qpid/proton/branches/examples: examples/messenger/perl/recv.pl proton-c/bindings/perl/lib/qpid/proton/Data.pm proton-c/bindings/perl/lib/qpid/proton/Message.pm
Author: gsim Date: Fri Oct 10 12:39:23 2014 New Revision: 1630784 URL: http://svn.apache.org/r1630784 Log: PROTON-646: Fix when Perl sets a message body to be BOOL:False. Had to work around how checking whether a body value was defined would return false if it were defined but set to false. Modified: qpid/proton/branches/examples/examples/messenger/perl/recv.pl qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Data.pm qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Message.pm Modified: qpid/proton/branches/examples/examples/messenger/perl/recv.pl URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/examples/messenger/perl/recv.pl?rev=1630784r1=1630783r2=1630784view=diff == --- qpid/proton/branches/examples/examples/messenger/perl/recv.pl (original) +++ qpid/proton/branches/examples/examples/messenger/perl/recv.pl Fri Oct 10 12:39:23 2014 @@ -61,6 +61,9 @@ for(;;) if (!defined($body_type)) { print The body type wasn't defined!\n; +} elsif ($body_type == qpid::proton::BOOL) { +print [BOOL]\n; +print . ($body ? TRUE : FALSE) . \n; } elsif ($body_type == qpid::proton::MAP) { print [HASH]\n; print Dumper(\%{$body}) . \n; Modified: qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Data.pm URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Data.pm?rev=1630784r1=1630783r2=1630784view=diff == --- qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Data.pm (original) +++ qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Data.pm Fri Oct 10 12:39:23 2014 @@ -321,9 +321,7 @@ Handles a boolean (Btrue/Bfalse) nod sub put_bool { my ($self) = @_; my $impl = $self-{_impl}; -my $value = $_[1]; - -die bool must be defined if !defined($value); +my $value = $_[1] || 0; cproton_perl::pn_data_put_bool($impl, $value); } Modified: qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Message.pm URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Message.pm?rev=1630784r1=1630783r2=1630784view=diff == --- qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Message.pm (original) +++ qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Message.pm Fri Oct 10 12:39:23 2014 @@ -487,12 +487,12 @@ sub get_body_type { sub preencode() { my ($self) = @_; my $impl = $self-{_impl}; - my $my_body = $self-{_body}; my $body_type = $self-{_body_type}; my $body = new qpid::proton::Data(cproton_perl::pn_message_body($impl)); + $body-clear(); -$body_type-put($body, $my_body) if($my_body $body_type); +$body_type-put($body, $my_body) if(defined($my_body) $body_type); my $my_props = $self-{_properties}; my $props = new qpid::proton::Data(cproton_perl::pn_message_properties($impl)); - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630786 - /qpid/proton/branches/examples/proton-c/src/proton-dump.c
Author: gsim Date: Fri Oct 10 12:40:58 2014 New Revision: 1630786 URL: http://svn.apache.org/r1630786 Log: PROTON-650: use pn_compat utilities for cross platform builds Modified: qpid/proton/branches/examples/proton-c/src/proton-dump.c Modified: qpid/proton/branches/examples/proton-c/src/proton-dump.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/proton-dump.c?rev=1630786r1=1630785r2=1630786view=diff == --- qpid/proton/branches/examples/proton-c/src/proton-dump.c (original) +++ qpid/proton/branches/examples/proton-c/src/proton-dump.c Fri Oct 10 12:40:58 2014 @@ -19,9 +19,9 @@ * */ -#include libgen.h +#include pncompat/misc_funcs.inc + #include stdio.h -#include unistd.h #include proton/buffer.h #include proton/codec.h #include proton/error.h @@ -101,7 +101,7 @@ int dump(const char *file) } void usage(char* prog) { - printf(Usage: %s [FILE1] [FILEn] ...\n, basename(prog)); + printf(Usage: %s [FILE1] [FILEn] ...\n, prog); printf(Displays the content of an AMQP dump file containing frame data.\n); printf(\n [FILEn] Dump file to be displayed.\n\n); } - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630788 - /qpid/proton/branches/examples/proton-c/src/engine/engine.c
Author: gsim Date: Fri Oct 10 12:41:25 2014 New Revision: 1630788 URL: http://svn.apache.org/r1630788 Log: made pn_link_send gracefully handle NULL Modified: qpid/proton/branches/examples/proton-c/src/engine/engine.c Modified: qpid/proton/branches/examples/proton-c/src/engine/engine.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/engine/engine.c?rev=1630788r1=1630787r2=1630788view=diff == --- qpid/proton/branches/examples/proton-c/src/engine/engine.c (original) +++ qpid/proton/branches/examples/proton-c/src/engine/engine.c Fri Oct 10 12:41:25 2014 @@ -1477,6 +1477,7 @@ ssize_t pn_link_send(pn_link_t *sender, { pn_delivery_t *current = pn_link_current(sender); if (!current) return PN_EOS; + if (!bytes || !n) return 0; pn_buffer_append(current-bytes, bytes, n); sender-session-outgoing_bytes += n; pn_add_tpwork(current); - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630787 - in /qpid/proton/branches/examples: proton-c/src/engine/ proton-c/src/transport/ proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ proton-j/src/main/java/org/apache/qpid
Author: gsim Date: Fri Oct 10 12:41:20 2014 New Revision: 1630787 URL: http://svn.apache.org/r1630787 Log: PROTON-641: fixed link cleanup on connection/session abort; made free not close automatically Modified: qpid/proton/branches/examples/proton-c/src/engine/engine.c qpid/proton/branches/examples/proton-c/src/transport/transport.c qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EndpointImpl.java qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java qpid/proton/branches/examples/tests/python/proton_tests/engine.py Modified: qpid/proton/branches/examples/proton-c/src/engine/engine.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/engine/engine.c?rev=1630787r1=1630786r2=1630787view=diff == --- qpid/proton/branches/examples/proton-c/src/engine/engine.c (original) +++ qpid/proton/branches/examples/proton-c/src/engine/engine.c Fri Oct 10 12:41:20 2014 @@ -111,8 +111,6 @@ void pn_endpoint_tini(pn_endpoint_t *end void pn_connection_free(pn_connection_t *connection) { assert(!connection-endpoint.freed); - if (pn_connection_state(connection) PN_LOCAL_ACTIVE) -pn_connection_close(connection); // free those endpoints that haven't been freed by the application LL_REMOVE(connection, endpoint, connection-endpoint); while (connection-endpoint_head) { @@ -226,8 +224,6 @@ void pn_session_free(pn_session_t *sessi pn_link_t *link = (pn_link_t *)pn_list_get(session-links, 0); pn_link_free(link); } - if (pn_session_state(session) PN_LOCAL_ACTIVE) -pn_session_close(session); pn_remove_session(session-connection, session); pn_endpoint_t *endpoint = (pn_endpoint_t *) session; LL_REMOVE(pn_ep_get_connection(endpoint), endpoint, endpoint); @@ -282,8 +278,6 @@ void pn_terminus_free(pn_terminus_t *ter void pn_link_free(pn_link_t *link) { assert(!link-endpoint.freed); - if (pn_link_state(link) PN_LOCAL_ACTIVE) -pn_link_close(link); pn_remove_link(link-session, link); pn_endpoint_t *endpoint = (pn_endpoint_t *) link; LL_REMOVE(pn_ep_get_connection(endpoint), endpoint, endpoint); Modified: qpid/proton/branches/examples/proton-c/src/transport/transport.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/transport/transport.c?rev=1630787r1=1630786r2=1630787view=diff == --- qpid/proton/branches/examples/proton-c/src/transport/transport.c (original) +++ qpid/proton/branches/examples/proton-c/src/transport/transport.c Fri Oct 10 12:41:20 2014 @@ -183,14 +183,20 @@ pn_session_t *pn_channel_state(pn_transp return (pn_session_t *) pn_hash_get(transport-remote_channels, channel); } -static void pn_map_channel(pn_transport_t *transport, uint16_t channel, pn_session_t *session) +static void pni_map_remote_channel(pn_session_t *session, uint16_t channel) { + pn_transport_t *transport = session-connection-transport; pn_hash_put(transport-remote_channels, channel, session); session-state.remote_channel = channel; } -void pn_unmap_channel(pn_transport_t *transport, pn_session_t *ssn) +void pni_transport_unbind_handles(pn_hash_t *handles); + +static void pni_unmap_remote_channel(pn_session_t *ssn) { + // XXX: should really update link state also + pni_transport_unbind_handles(ssn-state.remote_handles); + pn_transport_t *transport = ssn-connection-transport; uint16_t channel = ssn-state.remote_channel; ssn-state.remote_channel = -2; // note: may free the session: @@ -331,18 +337,18 @@ pn_error_t *pn_transport_error(pn_transp return NULL; } -static void pn_map_handle(pn_session_t *ssn, uint32_t handle, pn_link_t *link) +static void pni_map_remote_handle(pn_link_t *link, uint32_t handle) { link-state.remote_handle = handle; - pn_hash_put(ssn-state.remote_handles, handle, link); + pn_hash_put(link-session-state.remote_handles, handle, link); } -void pn_unmap_handle(pn_session_t *ssn, pn_link_t *link) +static void pni_unmap_remote_handle(pn_link_t *link) { - uint32_t handle = link-state.remote_handle; + uintptr_t handle = link-state.remote_handle; link-state.remote_handle = -2; // may delete link: - pn_hash_del(ssn-state.remote_handles, handle); + pn_hash_del(link-session-state.remote_handles, handle); } pn_link_t *pn_handle_state(pn_session_t *ssn, uint32_t handle) @@ -504,7 +510,7 @@ int pn_do_begin(pn_dispatcher_t *disp) ssn = pn_session(transport-connection); } ssn-state.incoming_transfer_count = next; - pn_map_channel(transport, disp-channel, ssn); + pni_map_remote_channel(ssn, disp-channel); PN_SET_REMOTE(ssn-endpoint.state, PN_REMOTE_ACTIVE);
svn commit: r1630792 - /qpid/proton/branches/examples/proton-c/CMakeLists.txt
Author: gsim Date: Fri Oct 10 12:41:49 2014 New Revision: 1630792 URL: http://svn.apache.org/r1630792 Log: PROTON-657: Fix build to use detected include directory for OpenSSL Modified: qpid/proton/branches/examples/proton-c/CMakeLists.txt Modified: qpid/proton/branches/examples/proton-c/CMakeLists.txt URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/CMakeLists.txt?rev=1630792r1=1630791r2=1630792view=diff == --- qpid/proton/branches/examples/proton-c/CMakeLists.txt (original) +++ qpid/proton/branches/examples/proton-c/CMakeLists.txt Fri Oct 10 12:41:49 2014 @@ -93,6 +93,7 @@ endif(PN_WINAPI) # Link in openssl if present if (SSL_IMPL STREQUAL openssl) set (pn_driver_ssl_impl src/ssl/openssl.c) + include_directories (${OPENSSL_INCLUDE_DIR}) set (SSL_LIB ${OPENSSL_LIBRARIES}) else (SSL_IMPL STREQUAL openssl) set (pn_driver_ssl_impl src/ssl/ssl_stub.c) - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630790 - in /qpid/proton/branches/examples/proton-c: ./ include/proton/ src/messenger/ src/posix/ src/windows/
Author: gsim Date: Fri Oct 10 12:41:36 2014 New Revision: 1630790 URL: http://svn.apache.org/r1630790 Log: PROTON-640 Windows IO completion port implementation for pn_io and pn_selectable classes Added: qpid/proton/branches/examples/proton-c/src/windows/iocp.c qpid/proton/branches/examples/proton-c/src/windows/iocp.h qpid/proton/branches/examples/proton-c/src/windows/write_pipeline.c Modified: qpid/proton/branches/examples/proton-c/CMakeLists.txt qpid/proton/branches/examples/proton-c/include/proton/io.h qpid/proton/branches/examples/proton-c/include/proton/selector.h qpid/proton/branches/examples/proton-c/src/messenger/messenger.c qpid/proton/branches/examples/proton-c/src/posix/io.c qpid/proton/branches/examples/proton-c/src/posix/selector.c qpid/proton/branches/examples/proton-c/src/windows/io.c qpid/proton/branches/examples/proton-c/src/windows/selector.c Modified: qpid/proton/branches/examples/proton-c/CMakeLists.txt URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/CMakeLists.txt?rev=1630790r1=1630789r2=1630790view=diff == --- qpid/proton/branches/examples/proton-c/CMakeLists.txt (original) +++ qpid/proton/branches/examples/proton-c/CMakeLists.txt Fri Oct 10 12:41:36 2014 @@ -81,7 +81,7 @@ add_custom_command ( # Select driver if(PN_WINAPI) - set (pn_io_impl src/windows/io.c) + set (pn_io_impl src/windows/io.c src/windows/iocp.c src/windows/write_pipeline.c) set (pn_selector_impl src/windows/selector.c) set (pn_driver_impl src/windows/driver.c) else(PN_WINAPI) Modified: qpid/proton/branches/examples/proton-c/include/proton/io.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/io.h?rev=1630790r1=1630789r2=1630790view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/io.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/io.h Fri Oct 10 12:41:36 2014 @@ -44,6 +44,7 @@ typedef int pn_socket_t; #endif typedef struct pn_io_t pn_io_t; +typedef struct pn_selector_t pn_selector_t; PN_EXTERN pn_io_t *pn_io(void); PN_EXTERN void pn_io_free(pn_io_t *io); @@ -58,6 +59,7 @@ PN_EXTERN int pn_pipe(pn_io_t *io, pn_so PN_EXTERN ssize_t pn_read(pn_io_t *io, pn_socket_t socket, void *buf, size_t size); PN_EXTERN ssize_t pn_write(pn_io_t *io, pn_socket_t socket, const void *buf, size_t size); PN_EXTERN bool pn_wouldblock(pn_io_t *io); +PN_EXTERN pn_selector_t *pn_io_selector(pn_io_t *io); #ifdef __cplusplus } Modified: qpid/proton/branches/examples/proton-c/include/proton/selector.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/selector.h?rev=1630790r1=1630789r2=1630790view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/selector.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/selector.h Fri Oct 10 12:41:36 2014 @@ -34,9 +34,7 @@ extern C { #define PN_WRITABLE (2) #define PN_EXPIRED (4) -typedef struct pn_selector_t pn_selector_t; - -PN_EXTERN pn_selector_t *pn_selector(void); +pn_selector_t *pni_selector(void); PN_EXTERN void pn_selector_free(pn_selector_t *selector); PN_EXTERN void pn_selector_add(pn_selector_t *selector, pn_selectable_t *selectable); PN_EXTERN void pn_selector_update(pn_selector_t *selector, pn_selectable_t *selectable); Modified: qpid/proton/branches/examples/proton-c/src/messenger/messenger.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/messenger/messenger.c?rev=1630790r1=1630789r2=1630790view=diff == --- qpid/proton/branches/examples/proton-c/src/messenger/messenger.c (original) +++ qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Fri Oct 10 12:41:36 2014 @@ -612,7 +612,7 @@ pn_messenger_t *pn_messenger(const char pni_selectable_set_context(m-interruptor, m); m-listeners = pn_list(0, 0); m-connections = pn_list(0, 0); -m-selector = pn_selector(); +m-selector = pn_io_selector(m-io); m-collector = pn_collector(); m-credit_mode = LINK_CREDIT_EXPLICIT; m-credit_batch = 1024; Modified: qpid/proton/branches/examples/proton-c/src/posix/io.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/posix/io.c?rev=1630790r1=1630789r2=1630790view=diff == --- qpid/proton/branches/examples/proton-c/src/posix/io.c (original) +++ qpid/proton/branches/examples/proton-c/src/posix/io.c Fri Oct 10 12:41:36 2014 @@ -21,6 +21,7 @@ #include proton/io.h #include proton/object.h +#include proton/selector.h #include ctype.h #include errno.h @@ -43,6 +44,7 @@
svn commit: r1630794 - in /qpid/proton/branches/examples/proton-c: bindings/python/proton.py bindings/ruby/lib/qpid_proton.rb bindings/ruby/lib/qpid_proton/version.rb include/proton/cproton.i
Author: gsim Date: Fri Oct 10 12:41:59 2014 New Revision: 1630794 URL: http://svn.apache.org/r1630794 Log: PROTON-651: added version constants for python, php, and ruby bindings Added: qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton/version.rb - copied, changed from r1630792, qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton.rb Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton.rb qpid/proton/branches/examples/proton-c/include/proton/cproton.i Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630794r1=1630793r2=1630794view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:41:59 2014 @@ -3641,6 +3641,8 @@ __all__ = [ Messenger, MessengerException, ProtonException, + PN_VERSION_MAJOR, + PN_VERSION_MINOR, Receiver, SASL, Sender, Modified: qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton.rb URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton.rb?rev=1630794r1=1630793r2=1630794view=diff == --- qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton.rb (original) +++ qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton.rb Fri Oct 10 12:41:59 2014 @@ -20,6 +20,7 @@ require cproton require date +require qpid_proton/version require qpid_proton/described require qpid_proton/mapping require qpid_proton/array Copied: qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton/version.rb (from r1630792, qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton.rb) URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton/version.rb?p2=qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton/version.rbp1=qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton.rbr1=1630792r2=1630794rev=1630794view=diff == --- qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton.rb (original) +++ qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton/version.rb Fri Oct 10 12:41:59 2014 @@ -17,21 +17,13 @@ # under the License. # -require cproton -require date +module Qpid -require qpid_proton/described -require qpid_proton/mapping -require qpid_proton/array -require qpid_proton/hash -require qpid_proton/exceptions -require qpid_proton/exception_handling -require qpid_proton/filters -require qpid_proton/message_format -require qpid_proton/data -require qpid_proton/message -require qpid_proton/subscription -require qpid_proton/tracker_status -require qpid_proton/tracker -require qpid_proton/selectable -require qpid_proton/messenger + module Proton + +PN_VERSION_MAJOR = Cproton::PN_VERSION_MAJOR +PN_VERSION_MINOR = Cproton::PN_VERSION_MINOR + + end + +end Modified: qpid/proton/branches/examples/proton-c/include/proton/cproton.i URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/cproton.i?rev=1630794r1=1630793r2=1630794view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/cproton.i (original) +++ qpid/proton/branches/examples/proton-c/include/proton/cproton.i Fri Oct 10 12:41:59 2014 @@ -31,6 +31,9 @@ typedef long long int int64_t; %include proton/import_export.h +%ignore _PROTON_VERSION_H; +%include proton/version.h + /* We cannot safely just wrap pn_bytes_t but each language binding must have a typemap for it - presumably to a string type */ %ignore pn_bytes_t; - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630795 - in /qpid/proton/branches/examples: proton-c/src/dispatcher/dispatcher.c proton-c/src/messenger/messenger.c tests/python/proton_tests/messenger.py
Author: gsim Date: Fri Oct 10 12:42:08 2014 New Revision: 1630795 URL: http://svn.apache.org/r1630795 Log: PROTON-610: Messenger code doesn't send heartbeat frames Modified: qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.c qpid/proton/branches/examples/proton-c/src/messenger/messenger.c qpid/proton/branches/examples/tests/python/proton_tests/messenger.py Modified: qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.c?rev=1630795r1=1630794r2=1630795view=diff == --- qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.c (original) +++ qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.c Fri Oct 10 12:42:08 2014 @@ -116,6 +116,10 @@ static void pn_do_trace(pn_dispatcher_t pn_string_format(disp-scratch, %u %s , ch, dir == OUT ? - : -); pn_inspect(args, disp-scratch); +if (pn_data_size(args)==0) { +pn_string_addf(disp-scratch, (EMPTY FRAME)); +} + if (size) { char buf[1024]; int e = pn_quote_data(buf, 1024, payload, size); Modified: qpid/proton/branches/examples/proton-c/src/messenger/messenger.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/messenger/messenger.c?rev=1630795r1=1630794r2=1630795view=diff == --- qpid/proton/branches/examples/proton-c/src/messenger/messenger.c (original) +++ qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Fri Oct 10 12:42:08 2014 @@ -31,6 +31,7 @@ #include stdlib.h #include string.h #include stdio.h + #include ../util.h #include ../platform.h #include ../platform_fmt.h @@ -1275,8 +1276,37 @@ int pn_messenger_process_events(pn_messe return processed; } +/** + * Function to invoke AMQP related timer events, such as a heartbeat to prevent + * remote_idle timeout events + */ +static void pni_messenger_tick(pn_messenger_t *messenger) +{ + for (size_t i = 0; i pn_list_size(messenger-connections); i++) { +pn_connection_t *connection = +(pn_connection_t *)pn_list_get(messenger-connections, i); +pn_transport_t *transport = pn_connection_transport(connection); +if (transport) { + pn_transport_tick(transport, pn_i_now()); + + // if there is pending data, such as an empty heartbeat frame, call + // process events. This should kick off the chain of selectables for + // reading/writing. + ssize_t pending = pn_transport_pending(transport); + if (pending 0) { +pn_connection_ctx_t *cctx = +(pn_connection_ctx_t *)pn_connection_get_context(connection); +pn_messenger_process_events(messenger); +pn_messenger_flow(messenger); +pni_conn_modified(pni_context(cctx-selectable)); + } +} + } +} + int pn_messenger_process(pn_messenger_t *messenger) { + bool doMessengerTick = true; pn_selectable_t *sel; int events; while ((sel = pn_selector_next(messenger-selector, events))) { @@ -1285,12 +1315,17 @@ int pn_messenger_process(pn_messenger_t } if (events PN_WRITABLE) { pn_selectable_writable(sel); + doMessengerTick = false; } if (events PN_EXPIRED) { pn_selectable_expired(sel); } } - + // ensure timer events are processed. Cannot call this inside the while loop + // as the timer events are not seen by the selector + if (doMessengerTick) { +pni_messenger_tick(messenger); + } if (messenger-interrupted) { messenger-interrupted = false; return PN_INTR; Modified: qpid/proton/branches/examples/tests/python/proton_tests/messenger.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/tests/python/proton_tests/messenger.py?rev=1630795r1=1630794r2=1630795view=diff == --- qpid/proton/branches/examples/tests/python/proton_tests/messenger.py (original) +++ qpid/proton/branches/examples/tests/python/proton_tests/messenger.py Fri Oct 10 12:42:08 2014 @@ -1027,3 +1027,59 @@ class SelectableMessengerTest(common.Tes def testSelectable4096(self): self.testSelectable(count=4096) + + +class IdleTimeoutTest(common.Test): + + def testIdleTimeout(self): + +Verify that a Messenger connection is kept alive using empty idle frames +when a idle_timeout is advertised by the remote peer. + +if java in sys.platform: + raise Skipped() +idle_timeout_secs = self.delay + +try: + idle_server = common.TestServerDrain(idle_timeout=idle_timeout_secs) + idle_server.timeout = self.timeout + idle_server.start() + + idle_client = Messenger(idle_client) + idle_client.timeout = self.timeout + idle_client.start() + + idle_client.subscribe(amqp://%s:%s/foo % +
svn commit: r1630800 - /qpid/proton/branches/examples/pom.xml
Author: gsim Date: Fri Oct 10 12:42:59 2014 New Revision: 1630800 URL: http://svn.apache.org/r1630800 Log: PROTON-664: add a profile to allow creating sources jars outwith the release build Modified: qpid/proton/branches/examples/pom.xml Modified: qpid/proton/branches/examples/pom.xml URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/pom.xml?rev=1630800r1=1630799r2=1630800view=diff == --- qpid/proton/branches/examples/pom.xml (original) +++ qpid/proton/branches/examples/pom.xml Fri Oct 10 12:42:59 2014 @@ -111,4 +111,27 @@ ciManagement urlhttps://builds.apache.org/view/M-R/view/Qpid/job/Qpid-proton-j//url /ciManagement + + profiles +profile + idsources/id + build +plugins + plugin +groupIdorg.apache.maven.plugins/groupId +artifactIdmaven-source-plugin/artifactId +version2.2.1/version +executions + execution +idattach-sources/id +goals + goaljar/goal +/goals + /execution +/executions + /plugin +/plugins + /build +/profile + /profiles /project - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630797 - /qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Constants.pm
Author: gsim Date: Fri Oct 10 12:42:31 2014 New Revision: 1630797 URL: http://svn.apache.org/r1630797 Log: PROTON-651: Export Proton major/minor version number in Perl. Modified: qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Constants.pm Modified: qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Constants.pm URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Constants.pm?rev=1630797r1=1630796r2=1630797view=diff == --- qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Constants.pm (original) +++ qpid/proton/branches/examples/proton-c/bindings/perl/lib/qpid/proton/Constants.pm Fri Oct 10 12:42:31 2014 @@ -20,6 +20,9 @@ package qpid::proton; use constant { +VERSION_MAJOR = $cproton_perl::PN_VERSION_MAJOR, +VERSION_MINOR = $cproton_perl::PN_VERSION_MINOR, + NULL = $cproton_perl::PN_NULL, BOOL = qpid::proton::Mapping-new( bool, - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630803 - /qpid/proton/branches/examples/proton-c/bindings/python/proton.py
Author: gsim Date: Fri Oct 10 12:43:36 2014 New Revision: 1630803 URL: http://svn.apache.org/r1630803 Log: NO-JIRA: Fix docstring for proton.Message.inferred property. Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630803r1=1630802r2=1630803view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:43:36 2014 @@ -866,7 +866,7 @@ class Message(object): def _set_inferred(self, value): self._check(pn_message_set_inferred(self._msg, bool(value))) - inferred = property(_is_inferred, _set_inferred, + inferred = property(_is_inferred, _set_inferred, doc= The inferred flag for a message indicates how the message content is encoded into AMQP sections. If inferred is true then binary and list values in the body of the message will be encoded as AMQP DATA - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630804 - /qpid/proton/branches/examples/.mailmap
Author: gsim Date: Fri Oct 10 12:43:46 2014 New Revision: 1630804 URL: http://svn.apache.org/r1630804 Log: NO-JIRA: Add git .mailmap file to map multiple versions of author names Added: qpid/proton/branches/examples/.mailmap Added: qpid/proton/branches/examples/.mailmap URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/.mailmap?rev=1630804view=auto == --- qpid/proton/branches/examples/.mailmap (added) +++ qpid/proton/branches/examples/.mailmap Fri Oct 10 12:43:46 2014 @@ -0,0 +1,2 @@ +Clifford Jansen cliffjan...@apache.org +Ken Giusti kgiu...@apache.org - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630802 - /qpid/proton/branches/examples/proton-c/src/windows/driver.c
Author: gsim Date: Fri Oct 10 12:43:24 2014 New Revision: 1630802 URL: http://svn.apache.org/r1630802 Log: QPID-658 Windows driver.c with selectors and selectables Modified: qpid/proton/branches/examples/proton-c/src/windows/driver.c Modified: qpid/proton/branches/examples/proton-c/src/windows/driver.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/windows/driver.c?rev=1630802r1=1630801r2=1630802view=diff == --- qpid/proton/branches/examples/proton-c/src/windows/driver.c (original) +++ qpid/proton/branches/examples/proton-c/src/windows/driver.c Fri Oct 10 12:43:24 2014 @@ -19,59 +19,39 @@ * */ -/* - * Copy of posix poll-based driver with minimal changes to use - * select(). TODO: fully native implementaton with I/O completion - * ports. - * - * This implementation comments out the posix max_fds arg to select - * which has no meaning on windows. The number of fd_set slots are - * configured at compile time via FD_SETSIZE, chosen large enough - * for the limited scalability of select() at the expense of - * 2*N*sizeof(unsigned int) bytes per driver instance. select (and - * associated macros like FD_ZERO) are otherwise unaffected - * performance-wise by increasing FD_SETSIZE. - */ - -#define FD_SETSIZE 2048 -#ifndef _WIN32_WINNT -#define _WIN32_WINNT 0x0501 -#endif -#if _WIN32_WINNT 0x0501 -#error Proton requires Windows API support for XP or later. -#endif -#include winsock2.h -#include Ws2tcpip.h -#define PN_WINAPI - #include assert.h #include stdio.h #include ctype.h #include sys/types.h #include fcntl.h -#include ../platform.h -#include proton/io.h #include proton/driver.h #include proton/driver_extras.h #include proton/error.h +#include proton/io.h #include proton/sasl.h #include proton/ssl.h #include proton/util.h +#include proton/object.h +#include proton/selector.h +#include proton/types.h +#include ../selectable.h #include ../util.h +#include ../platform.h #include ../ssl/ssl-internal.h -#include proton/types.h - -/* Posix compatibility helpers */ - -static int pn_socket_pair(SOCKET sv[2]); -#define close(sock) closesocket(sock) -static int pn_i_error_from_errno_wrap(pn_error_t *error, const char *msg) { - errno = WSAGetLastError(); - return pn_i_error_from_errno(error, msg); -} -#define pn_i_error_from_errno(e,m) pn_i_error_from_errno_wrap(e,m) +/* + * This driver provides limited thread safety for some operations on pn_connector_t objects. + * + * These calls are: pn_connector_process(), pn_connector_activate(), pn_connector_activated(), + * pn_connector_close(), and others that only touch the connection object, i.e. + * pn_connector_context(). These calls provide limited safety in that simultaneous calls are + * not allowed to the same pn_connector_t object. + * + * The application must call pn_driver_wakeup() and resume its wait loop logic if a call to + * pn_wait() may have overlapped with any of the above calls that could affect a pn_wait() + * outcome. + */ /* Decls */ @@ -81,82 +61,137 @@ static int pn_i_error_from_errno_wrap(pn struct pn_driver_t { pn_error_t *error; pn_io_t *io; + pn_selector_t *selector; pn_listener_t *listener_head; pn_listener_t *listener_tail; pn_listener_t *listener_next; pn_connector_t *connector_head; pn_connector_t *connector_tail; - pn_connector_t *connector_next; + pn_listener_t *ready_listener_head; + pn_listener_t *ready_listener_tail; + pn_connector_t *ready_connector_head; + pn_connector_t *ready_connector_tail; + pn_selectable_t *ctrl_selectable; size_t listener_count; size_t connector_count; - size_t closed_count; - fd_set readfds; - fd_set writefds; - fd_set exceptfds; - // int max_fds; - bool overflow; pn_socket_t ctrl[2]; //pipe for updating selectable status - pn_trace_t trace; - pn_timestamp_t wakeup; }; +typedef enum {LISTENER, CONNECTOR} sel_type_t; + struct pn_listener_t { + sel_type_t type; pn_driver_t *driver; pn_listener_t *listener_next; pn_listener_t *listener_prev; - int idx; + pn_listener_t *ready_listener_next; + pn_listener_t *ready_listener_prev; + void *context; + pn_selectable_t *selectable; bool pending; - pn_socket_t fd; bool closed; - void *context; }; #define PN_NAME_MAX (256) struct pn_connector_t { + sel_type_t type; pn_driver_t *driver; pn_connector_t *connector_next; pn_connector_t *connector_prev; + pn_connector_t *ready_connector_next; + pn_connector_t *ready_connector_prev; char name[PN_NAME_MAX]; + pn_timestamp_t wakeup; + pn_timestamp_t posted_wakeup; + pn_connection_t *connection; + pn_transport_t *transport; + pn_sasl_t *sasl; + pn_listener_t *listener; + void *context; + pn_selectable_t *selectable; int idx; + int status; + int posted_status; + pn_trace_t trace; bool pending_tick; bool pending_read; bool pending_write; - pn_socket_t fd; - int
svn commit: r1630806 - in /qpid/proton/branches/examples/proton-j/src: main/java/org/apache/qpid/proton/engine/impl/ test/java/org/apache/qpid/proton/systemtests/
Author: gsim Date: Fri Oct 10 12:44:55 2014 New Revision: 1630806 URL: http://svn.apache.org/r1630806 Log: PROTON-685: iterate on a copy of the values to prevent CME after the child free() calls modifies the map Added: qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/systemtests/EngineTestBase.java qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/systemtests/FreeTest.java Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/systemtests/ProtonEngineExampleTest.java Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java?rev=1630806r1=1630805r2=1630806view=diff == --- qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java (original) +++ qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java Fri Oct 10 12:44:55 2014 @@ -103,11 +103,14 @@ public class SessionImpl extends Endpoin _connection.removeSessionEndpoint(_node); _node = null; -for(SenderImpl sender : _senders.values()) { +ListSenderImpl senders = new ArrayListSenderImpl(_senders.values()); +for(SenderImpl sender : senders) { sender.free(); } _senders.clear(); -for(ReceiverImpl receiver : _receivers.values()) { + +ListReceiverImpl receivers = new ArrayListReceiverImpl(_receivers.values()); +for(ReceiverImpl receiver : receivers) { receiver.free(); } _receivers.clear(); Added: qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/systemtests/EngineTestBase.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/systemtests/EngineTestBase.java?rev=1630806view=auto == --- qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/systemtests/EngineTestBase.java (added) +++ qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/systemtests/EngineTestBase.java Fri Oct 10 12:44:55 2014 @@ -0,0 +1,113 @@ +/* + * 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 org.apache.qpid.proton.systemtests; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertTrue; + +import java.nio.ByteBuffer; +import java.util.logging.Logger; + +import org.apache.qpid.proton.amqp.messaging.Target; +import org.apache.qpid.proton.engine.Endpoint; +import org.apache.qpid.proton.engine.EndpointState; + +public abstract class EngineTestBase +{ +private static final Logger LOGGER = Logger.getLogger(EngineTestBase.class.getName()); + +private final TestLoggingHelper _testLoggingHelper = new TestLoggingHelper(LOGGER); +private final ProtonContainer _client = new ProtonContainer(clientContainer); +private final ProtonContainer _server = new ProtonContainer(serverContainer); + +protected TestLoggingHelper getTestLoggingHelper() +{ +return _testLoggingHelper; +} + +protected ProtonContainer getClient() +{ +return _client; +} + +protected ProtonContainer getServer() +{ +return _server; +} + +protected void assertClientHasNothingToOutput() +{ +assertEquals(0, getClient().transport.getOutputBuffer().remaining()); +getClient().transport.outputConsumed(); +} + +protected void pumpServerToClient() +{ +ByteBuffer serverBuffer = getServer().transport.getOutputBuffer(); + +getTestLoggingHelper().prettyPrint( + TestLoggingHelper.SERVER_PREFIX + , serverBuffer); +assertTrue(Server expected to produce some output,
svn commit: r1630808 - /qpid/proton/branches/examples/.gitignore
Author: gsim Date: Fri Oct 10 12:45:35 2014 New Revision: 1630808 URL: http://svn.apache.org/r1630808 Log: NO-JIRA: add ignore for Eclipse PyDev plugin project config Modified: qpid/proton/branches/examples/.gitignore Modified: qpid/proton/branches/examples/.gitignore URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/.gitignore?rev=1630808r1=1630807r2=1630808view=diff == --- qpid/proton/branches/examples/.gitignore (original) +++ qpid/proton/branches/examples/.gitignore Fri Oct 10 12:45:35 2014 @@ -23,6 +23,7 @@ target .settings .cproject eclipse-classes +.pydevproject # End of Eclipse IDE files # The usual location for proton-c build files - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630807 - /qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
Author: macbean Date: Fri Oct 10 12:45:28 2014 New Revision: 1630807 URL: http://svn.apache.org/r1630807 Log: QPID-6134: [Java Broker] added operational logging call to additional intruder detection logic Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java?rev=1630807r1=1630806r2=1630807view=diff == --- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java (original) +++ qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java Fri Oct 10 12:45:28 2014 @@ -343,6 +343,7 @@ public class BDBHAVirtualHostNodeImpl ex String nodeAddress = node.getHostName() + : + node.getPort(); if (!_permittedNodes.contains(nodeAddress)) { +getEventLogger().message(getGroupLogSubject(), HighAvailabilityMessages.INTRUDER_DETECTED(node.getName(), nodeAddress)); shutdownOnIntruder(nodeAddress); throw new IllegalStateException(Intruder node detected: + nodeAddress); } - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630809 - in /qpid/proton/branches/examples: proton-c/bindings/python/proton.py proton-c/bindings/ruby/lib/qpid_proton/version.rb proton-j/src/main/resources/cproton.py
Author: gsim Date: Fri Oct 10 12:46:30 2014 New Revision: 1630809 URL: http://svn.apache.org/r1630809 Log: PROTON-651: remove the extraineous 'PN_' if under the proton namespace. Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton/version.rb qpid/proton/branches/examples/proton-j/src/main/resources/cproton.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630809r1=1630808r2=1630809view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:46:30 2014 @@ -89,6 +89,8 @@ try: except NameError: bytes = str +VERSION_MAJOR = PN_VERSION_MAJOR +VERSION_MINOR = PN_VERSION_MINOR API_LANGUAGE = C IMPLEMENTATION_LANGUAGE = C @@ -3641,8 +3643,8 @@ __all__ = [ Messenger, MessengerException, ProtonException, - PN_VERSION_MAJOR, - PN_VERSION_MINOR, + VERSION_MAJOR, + VERSION_MINOR, Receiver, SASL, Sender, Modified: qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton/version.rb URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton/version.rb?rev=1630809r1=1630808r2=1630809view=diff == --- qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton/version.rb (original) +++ qpid/proton/branches/examples/proton-c/bindings/ruby/lib/qpid_proton/version.rb Fri Oct 10 12:46:30 2014 @@ -21,8 +21,8 @@ module Qpid module Proton -PN_VERSION_MAJOR = Cproton::PN_VERSION_MAJOR -PN_VERSION_MINOR = Cproton::PN_VERSION_MINOR +VERSION_MAJOR = Cproton::PN_VERSION_MAJOR +VERSION_MINOR = Cproton::PN_VERSION_MINOR end Modified: qpid/proton/branches/examples/proton-j/src/main/resources/cproton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/main/resources/cproton.py?rev=1630809r1=1630808r2=1630809view=diff == --- qpid/proton/branches/examples/proton-j/src/main/resources/cproton.py (original) +++ qpid/proton/branches/examples/proton-j/src/main/resources/cproton.py Fri Oct 10 12:46:30 2014 @@ -23,6 +23,10 @@ exposed to python via swig. This allows against both the C and Java protocol implementations. +# @todo(kgiusti) dynamically set these via filters in the pom.xml file +PN_VERSION_MAJOR = 0 +PN_VERSION_MINOR = 0 + from cerror import * from ccodec import * from cengine import * - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630810 - in /qpid/proton/branches/examples/proton-c: CMakeLists.txt include/proton/event.h src/engine/engine.c src/engine/event.c src/engine/event.h src/events/ src/events/event.c src/tr
Author: gsim Date: Fri Oct 10 12:47:29 2014 New Revision: 1630810 URL: http://svn.apache.org/r1630810 Log: moved event code into its own directory; made pn_collector_put public Added: qpid/proton/branches/examples/proton-c/src/events/ qpid/proton/branches/examples/proton-c/src/events/event.c - copied, changed from r1630809, qpid/proton/branches/examples/proton-c/src/engine/event.c Removed: qpid/proton/branches/examples/proton-c/src/engine/event.c qpid/proton/branches/examples/proton-c/src/engine/event.h Modified: qpid/proton/branches/examples/proton-c/CMakeLists.txt qpid/proton/branches/examples/proton-c/include/proton/event.h qpid/proton/branches/examples/proton-c/src/engine/engine.c qpid/proton/branches/examples/proton-c/src/transport/transport.c Modified: qpid/proton/branches/examples/proton-c/CMakeLists.txt URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/CMakeLists.txt?rev=1630810r1=1630809r2=1630810view=diff == --- qpid/proton/branches/examples/proton-c/CMakeLists.txt (original) +++ qpid/proton/branches/examples/proton-c/CMakeLists.txt Fri Oct 10 12:47:29 2014 @@ -280,7 +280,7 @@ set (qpid-proton-core src/dispatcher/dispatcher.c src/engine/engine.c - src/engine/event.c + src/events/event.c src/transport/transport.c src/message/message.c src/sasl/sasl.c Modified: qpid/proton/branches/examples/proton-c/include/proton/event.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/event.h?rev=1630810r1=1630809r2=1630810view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/event.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/event.h Fri Oct 10 12:47:29 2014 @@ -257,6 +257,25 @@ PN_EXTERN pn_collector_t *pn_collector(v PN_EXTERN void pn_collector_free(pn_collector_t *collector); /** + * Place a new event on a collector. + * + * This operation will create a new event of the given type and + * context and return a pointer to the newly created event. In some + * cases an event of the given type and context can be elided. When + * this happens, this operation will return a NULL pointer. + * + * @param[in] collector a collector object + * @param[in] type the event type + * @param[in] context the event context + * + * @return a pointer to the newly created event or NULL if the event + * was elided + */ + +pn_event_t *pn_collector_put(pn_collector_t *collector, pn_event_type_t type, + void *context); + +/** * Access the head event contained by a collector. * * This operation will continue to return the same event until it is Modified: qpid/proton/branches/examples/proton-c/src/engine/engine.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/engine/engine.c?rev=1630810r1=1630809r2=1630810view=diff == --- qpid/proton/branches/examples/proton-c/src/engine/engine.c (original) +++ qpid/proton/branches/examples/proton-c/src/engine/engine.c Fri Oct 10 12:47:29 2014 @@ -33,7 +33,6 @@ #include ../platform.h #include ../platform_fmt.h #include ../transport/transport.h -#include ../engine/event.h // endpoints @@ -332,8 +331,6 @@ void pn_endpoint_tini(pn_endpoint_t *end pn_condition_tini(endpoint-condition); } -#include event.h - static bool pni_post_final(pn_endpoint_t *endpoint, pn_event_type_t type) { pn_connection_t *conn = pn_ep_get_connection(endpoint); @@ -1754,3 +1751,77 @@ int pn_condition_redirect_port(pn_condit pn_data_rewind(data); return port; } + +pn_connection_t *pn_event_connection(pn_event_t *event) +{ + pn_session_t *ssn; + pn_transport_t *transport; + + switch (pn_event_category(event)) { + case PN_EVENT_CATEGORY_CONNECTION: +return (pn_connection_t *) pn_event_context(event); + case PN_EVENT_CATEGORY_TRANSPORT: +transport = pn_event_transport(event); +if (transport) + return transport-connection; +return NULL; + default: +ssn = pn_event_session(event); +if (ssn) + return pn_session_connection(ssn); + } + return NULL; +} + +pn_session_t *pn_event_session(pn_event_t *event) +{ + pn_link_t *link; + switch (pn_event_category(event)) { + case PN_EVENT_CATEGORY_SESSION: +return (pn_session_t *) pn_event_context(event); + default: +link = pn_event_link(event); +if (link) + return pn_link_session(link); + } + return NULL; +} + +pn_link_t *pn_event_link(pn_event_t *event) +{ + pn_delivery_t *dlv; + switch (pn_event_category(event)) { + case PN_EVENT_CATEGORY_LINK: +return (pn_link_t *) pn_event_context(event); + default: +dlv = pn_event_delivery(event); +if (dlv) + return pn_delivery_link(dlv); + } + return NULL; +} + +pn_delivery_t
svn commit: r1630811 - in /qpid/proton/branches/examples/proton-c: include/proton/cproton.i include/proton/object.h src/messenger/messenger.c src/object/object.c src/tests/object.c
Author: gsim Date: Fri Oct 10 12:48:35 2014 New Revision: 1630811 URL: http://svn.apache.org/r1630811 Log: revised class system to be more extensible Modified: qpid/proton/branches/examples/proton-c/include/proton/cproton.i qpid/proton/branches/examples/proton-c/include/proton/object.h qpid/proton/branches/examples/proton-c/src/messenger/messenger.c qpid/proton/branches/examples/proton-c/src/object/object.c qpid/proton/branches/examples/proton-c/src/tests/object.c Modified: qpid/proton/branches/examples/proton-c/include/proton/cproton.i URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/cproton.i?rev=1630811r1=1630810r2=1630811view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/cproton.i (original) +++ qpid/proton/branches/examples/proton-c/include/proton/cproton.i Fri Oct 10 12:48:35 2014 @@ -53,6 +53,8 @@ typedef long long int int64_t; %include proton/types.h %ignore pn_string_vformat; %ignore pn_string_vaddf; +%immutable PN_OBJECT; +%immutable PN_VOID; %include proton/object.h %ignore pn_error_format; Modified: qpid/proton/branches/examples/proton-c/include/proton/object.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/object.h?rev=1630811r1=1630810r2=1630811view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/object.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/object.h Fri Oct 10 12:48:35 2014 @@ -35,31 +35,82 @@ extern C { typedef uintptr_t pn_handle_t; typedef intptr_t pn_shandle_t; +typedef struct pn_class_t pn_class_t; +typedef struct pn_string_t pn_string_t; typedef struct pn_list_t pn_list_t; typedef struct pn_map_t pn_map_t; typedef struct pn_hash_t pn_hash_t; -typedef struct pn_string_t pn_string_t; typedef void *(*pn_iterator_next_t)(void *state); typedef struct pn_iterator_t pn_iterator_t; -typedef struct { +struct pn_class_t { const char *name; + void *(*newinst)(const pn_class_t *, size_t); void (*initialize)(void *); + void (*incref)(void *); + void (*decref)(void *); + int (*refcount)(void *); void (*finalize)(void *); + void (*free)(void *); + const pn_class_t *(*reify)(void *); uintptr_t (*hashcode)(void *); intptr_t (*compare)(void *, void *); int (*inspect)(void *, pn_string_t *); -} pn_class_t; +}; + +extern const pn_class_t *PN_OBJECT; +extern const pn_class_t *PN_VOID; #define PN_CLASS(PREFIX) { \ #PREFIX,\ +pn_object_new, \ +PREFIX ## _initialize, \ +pn_object_incref, \ +pn_object_decref, \ +pn_object_refcount, \ +PREFIX ## _finalize,\ +pn_object_free, \ +pn_object_reify,\ +PREFIX ## _hashcode,\ +PREFIX ## _compare, \ +PREFIX ## _inspect \ +} + +#define PN_METACLASS(PREFIX) { \ +#PREFIX,\ +PREFIX ## _new, \ PREFIX ## _initialize, \ +PREFIX ## _incref, \ +PREFIX ## _decref, \ +PREFIX ## _refcount,\ PREFIX ## _finalize,\ +PREFIX ## _free,\ +PREFIX ## _reify, \ PREFIX ## _hashcode,\ PREFIX ## _compare, \ PREFIX ## _inspect \ } +PN_EXTERN void *pn_class_new(const pn_class_t *clazz, size_t size); +PN_EXTERN void *pn_class_incref(const pn_class_t *clazz, void *object); +PN_EXTERN void pn_class_decref(const pn_class_t *clazz, void *object); +PN_EXTERN void pn_class_free(const pn_class_t *clazz, void *object); +PN_EXTERN int pn_class_refcount(const pn_class_t *clazz, void *object); +PN_EXTERN const pn_class_t *pn_class_reify(const pn_class_t *clazz, void *object); +PN_EXTERN uintptr_t pn_class_hashcode(const pn_class_t *clazz, void *object); +PN_EXTERN intptr_t pn_class_compare(const pn_class_t *clazz, void *a, void *b); +PN_EXTERN bool pn_class_equals(const pn_class_t *clazz, void *a, void *b); + +PN_EXTERN void *pn_object_new(const pn_class_t *clazz, size_t size); +PN_EXTERN const pn_class_t *pn_object_reify(void *object); +PN_EXTERN void pn_object_incref(void *object); +PN_EXTERN int pn_object_refcount(void *object); +PN_EXTERN void pn_object_decref(void *object); +PN_EXTERN void pn_object_free(void *object); +PN_EXTERN uintptr_t pn_object_hashcode(void *object);
svn commit: r1630813 - in /qpid/proton/branches/examples/proton-c: include/proton/ src/ src/codec/ src/engine/ src/events/ src/message/ src/messenger/ src/object/ src/posix/ src/tests/ src/transport/
Author: gsim Date: Fri Oct 10 12:50:03 2014 New Revision: 1630813 URL: http://svn.apache.org/r1630813 Log: made list and map take classes Modified: qpid/proton/branches/examples/proton-c/include/proton/object.h qpid/proton/branches/examples/proton-c/src/codec/codec.c qpid/proton/branches/examples/proton-c/src/codec/decoder.c qpid/proton/branches/examples/proton-c/src/codec/encoder.c qpid/proton/branches/examples/proton-c/src/engine/engine.c qpid/proton/branches/examples/proton-c/src/events/event.c qpid/proton/branches/examples/proton-c/src/message/message.c qpid/proton/branches/examples/proton-c/src/messenger/messenger.c qpid/proton/branches/examples/proton-c/src/messenger/store.c qpid/proton/branches/examples/proton-c/src/messenger/subscription.c qpid/proton/branches/examples/proton-c/src/messenger/transform.c qpid/proton/branches/examples/proton-c/src/object/object.c qpid/proton/branches/examples/proton-c/src/posix/driver.c qpid/proton/branches/examples/proton-c/src/posix/io.c qpid/proton/branches/examples/proton-c/src/posix/selector.c qpid/proton/branches/examples/proton-c/src/selectable.c qpid/proton/branches/examples/proton-c/src/tests/object.c qpid/proton/branches/examples/proton-c/src/transport/transport.c Modified: qpid/proton/branches/examples/proton-c/include/proton/object.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/object.h?rev=1630813r1=1630812r2=1630813view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/object.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/object.h Fri Oct 10 12:50:03 2014 @@ -43,6 +43,9 @@ typedef struct pn_hash_t pn_hash_t; typedef void *(*pn_iterator_next_t)(void *state); typedef struct pn_iterator_t pn_iterator_t; +// XXX: if we factor refcounting stuff into a separate dimension then +// we could have a weakref class instead of having the options stuff + struct pn_class_t { const char *name; void *(*newinst)(const pn_class_t *, size_t); @@ -93,13 +96,14 @@ extern const pn_class_t *PN_VOID; PN_EXTERN void *pn_class_new(const pn_class_t *clazz, size_t size); PN_EXTERN void *pn_class_incref(const pn_class_t *clazz, void *object); -PN_EXTERN void pn_class_decref(const pn_class_t *clazz, void *object); -PN_EXTERN void pn_class_free(const pn_class_t *clazz, void *object); PN_EXTERN int pn_class_refcount(const pn_class_t *clazz, void *object); +PN_EXTERN int pn_class_decref(const pn_class_t *clazz, void *object); +PN_EXTERN void pn_class_free(const pn_class_t *clazz, void *object); PN_EXTERN const pn_class_t *pn_class_reify(const pn_class_t *clazz, void *object); PN_EXTERN uintptr_t pn_class_hashcode(const pn_class_t *clazz, void *object); PN_EXTERN intptr_t pn_class_compare(const pn_class_t *clazz, void *a, void *b); PN_EXTERN bool pn_class_equals(const pn_class_t *clazz, void *a, void *b); +PN_EXTERN int pn_class_inspect(const pn_class_t *clazz, void *object, pn_string_t *dst); PN_EXTERN void *pn_object_new(const pn_class_t *clazz, size_t size); PN_EXTERN const pn_class_t *pn_object_reify(void *object); @@ -107,19 +111,10 @@ PN_EXTERN void pn_object_incref(void *ob PN_EXTERN int pn_object_refcount(void *object); PN_EXTERN void pn_object_decref(void *object); PN_EXTERN void pn_object_free(void *object); -PN_EXTERN uintptr_t pn_object_hashcode(void *object); -PN_EXTERN intptr_t pn_object_compare(void *a, void *b); -PN_EXTERN int pn_object_inspect(void *object, pn_string_t *dst); - -PN_EXTERN void *pn_new(size_t size, const pn_class_t* clazz); -PN_EXTERN void *pn_new2(size_t size, const pn_class_t* clazz, void *from); -PN_EXTERN void pn_initialize(void *object, const pn_class_t *clazz); + PN_EXTERN void *pn_incref(void *object); -PN_EXTERN void *pn_incref2(void *object, void *from); -PN_EXTERN void pn_decref(void *object); -PN_EXTERN void pn_decref2(void *object, void *from); +PN_EXTERN int pn_decref(void *object); PN_EXTERN int pn_refcount(void *object); -PN_EXTERN void pn_finalize(void *object); PN_EXTERN void pn_free(void *object); PN_EXTERN const pn_class_t *pn_class(void* object); PN_EXTERN uintptr_t pn_hashcode(void *object); @@ -129,7 +124,7 @@ PN_EXTERN int pn_inspect(void *object, p #define PN_REFCOUNT (0x1) -PN_EXTERN pn_list_t *pn_list(size_t capacity, int options); +PN_EXTERN pn_list_t *pn_list(const pn_class_t *clazz, size_t capacity, int options); PN_EXTERN size_t pn_list_size(pn_list_t *list); PN_EXTERN void *pn_list_get(pn_list_t *list, int index); PN_EXTERN void pn_list_set(pn_list_t *list, int index, void *value); @@ -143,7 +138,8 @@ PN_EXTERN void pn_list_iterator(pn_list_ #define PN_REFCOUNT_KEY (0x2) #define PN_REFCOUNT_VALUE (0x4) -PN_EXTERN pn_map_t *pn_map(size_t capacity, float load_factor, int options); +PN_EXTERN pn_map_t *pn_map(const pn_class_t *key, const pn_class_t
svn commit: r1630817 - in /qpid/proton/branches/examples: proton-c/bindings/python/ proton-c/include/proton/ proton-c/src/engine/ proton-c/src/events/ proton-c/src/object/ proton-c/src/transport/ prot
Author: gsim Date: Fri Oct 10 12:51:19 2014 New Revision: 1630817 URL: http://svn.apache.org/r1630817 Log: made pn_collector_put public and modified collector to work with regular void * pointers as well as pn_object pointers Added: qpid/proton/branches/examples/proton-j/src/main/resources/cobject.py - copied, changed from r1630816, qpid/proton/branches/examples/proton-j/src/main/resources/cproton.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/cproton.i qpid/proton/branches/examples/proton-c/bindings/python/proton.py qpid/proton/branches/examples/proton-c/include/proton/cproton.i qpid/proton/branches/examples/proton-c/include/proton/event.h qpid/proton/branches/examples/proton-c/include/proton/object.h qpid/proton/branches/examples/proton-c/src/engine/engine.c qpid/proton/branches/examples/proton-c/src/events/event.c qpid/proton/branches/examples/proton-c/src/object/object.c qpid/proton/branches/examples/proton-c/src/transport/transport.c qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java qpid/proton/branches/examples/proton-j/src/main/resources/cengine.py qpid/proton/branches/examples/proton-j/src/main/resources/cproton.py qpid/proton/branches/examples/tests/python/proton_tests/engine.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/cproton.i URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/cproton.i?rev=1630817r1=1630816r2=1630817view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/cproton.i (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/cproton.i Fri Oct 10 12:51:19 2014 @@ -375,5 +375,23 @@ bool pn_ssl_get_protocol_name(pn_ssl_t * int pn_ssl_get_peer_hostname(pn_ssl_t *ssl, char *OUTPUT, size_t *OUTPUT_SIZE); %ignore pn_ssl_get_peer_hostname; +%inline %{ + void *pn_py2void(PyObject *object) { +return object; + } + + PyObject *pn_void2py(void *object) { +if (object) { + Py_INCREF(object); + return object; +} else { + Py_RETURN_NONE; +} + } + + PyObject *pn_cast_pn_void(void *object) { +return pn_void2py(object); + } +%} %include proton/cproton.i Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630817r1=1630816r2=1630817view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:51:19 2014 @@ -3324,29 +3324,32 @@ class SSLSessionDetails(object): return self._session_id +wrappers = { + pn_void: lambda x: pn_void2py(x), + pn_connection: lambda x: Connection._wrap_connection(pn_cast_pn_connection(x)), + pn_session: lambda x: Session._wrap_session(pn_cast_pn_session(x)), + pn_link: lambda x: Link._wrap_link(pn_cast_pn_link(x)), + pn_delivery: lambda x: Delivery._wrap_delivery(pn_cast_pn_delivery(x)), + pn_transport: lambda x: Transport(pn_cast_pn_transport(x)) +} + class Collector: def __init__(self): self._impl = pn_collector() self._contexts = set() + def put(self, obj, etype): +pn_collector_put(self._impl, PN_VOID, pn_py2void(obj), etype) + def peek(self): event = pn_collector_peek(self._impl) if event is None: return None -tpi = pn_event_transport(event) -if tpi: - tp = Transport(tpi) -else: - tp = None -return Event(type=pn_event_type(event), - category=pn_event_category(event), - connection=Connection._wrap_connection(pn_event_connection(event)), - session=Session._wrap_session(pn_event_session(event)), - link=Link._wrap_link(pn_event_link(event)), - delivery=Delivery._wrap_delivery(pn_event_delivery(event)), - transport=tp) +clazz = pn_class_name(pn_event_class(event)) +context = wrappers[clazz](pn_event_context(event)) +return Event(clazz, context, pn_event_type(event)) def pop(self): ev = self.peek() @@ -3390,34 +3393,19 @@ class Event: DELIVERY = PN_DELIVERY TRANSPORT = PN_TRANSPORT - def __init__(self, type, category, - connection, session, link, delivery, transport): + def __init__(self, clazz, context, type): +self.clazz = clazz +self.context = context self.type = type -self.category = category -self.connection = connection -self.session = session -self.link = link -self.delivery = delivery -self.transport = transport def _popped(self, collector): -if self.type == Event.LINK_FINAL: - ctx = self.link -elif self.type == Event.SESSION_FINAL: -
svn commit: r1630816 - in /qpid/proton/branches/examples/proton-c: include/proton/ src/engine/ src/messenger/ src/object/ src/posix/ src/tests/ src/transport/
Author: gsim Date: Fri Oct 10 12:51:03 2014 New Revision: 1630816 URL: http://svn.apache.org/r1630816 Log: added PN_WEAKREF class and removed options Modified: qpid/proton/branches/examples/proton-c/include/proton/cproton.i qpid/proton/branches/examples/proton-c/include/proton/object.h qpid/proton/branches/examples/proton-c/src/engine/engine.c qpid/proton/branches/examples/proton-c/src/messenger/messenger.c qpid/proton/branches/examples/proton-c/src/messenger/store.c qpid/proton/branches/examples/proton-c/src/messenger/transform.c qpid/proton/branches/examples/proton-c/src/object/list.c qpid/proton/branches/examples/proton-c/src/object/map.c qpid/proton/branches/examples/proton-c/src/object/object.c qpid/proton/branches/examples/proton-c/src/posix/selector.c qpid/proton/branches/examples/proton-c/src/tests/object.c qpid/proton/branches/examples/proton-c/src/transport/transport.c Modified: qpid/proton/branches/examples/proton-c/include/proton/cproton.i URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/cproton.i?rev=1630816r1=1630815r2=1630816view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/cproton.i (original) +++ qpid/proton/branches/examples/proton-c/include/proton/cproton.i Fri Oct 10 12:51:03 2014 @@ -55,6 +55,7 @@ typedef long long int int64_t; %ignore pn_string_vaddf; %immutable PN_OBJECT; %immutable PN_VOID; +%immutable PN_WEAKREF; %include proton/object.h %ignore pn_error_format; Modified: qpid/proton/branches/examples/proton-c/include/proton/object.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/object.h?rev=1630816r1=1630815r2=1630816view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/object.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/object.h Fri Oct 10 12:51:03 2014 @@ -43,9 +43,6 @@ typedef struct pn_hash_t pn_hash_t; typedef void *(*pn_iterator_next_t)(void *state); typedef struct pn_iterator_t pn_iterator_t; -// XXX: if we factor refcounting stuff into a separate dimension then -// we could have a weakref class instead of having the options stuff - struct pn_class_t { const char *name; void *(*newinst)(const pn_class_t *, size_t); @@ -63,6 +60,7 @@ struct pn_class_t { extern const pn_class_t *PN_OBJECT; extern const pn_class_t *PN_VOID; +extern const pn_class_t *PN_WEAKREF; #define PN_CLASS(PREFIX) { \ #PREFIX,\ @@ -124,7 +122,7 @@ PN_EXTERN int pn_inspect(void *object, p #define PN_REFCOUNT (0x1) -PN_EXTERN pn_list_t *pn_list(const pn_class_t *clazz, size_t capacity, int options); +PN_EXTERN pn_list_t *pn_list(const pn_class_t *clazz, size_t capacity); PN_EXTERN size_t pn_list_size(pn_list_t *list); PN_EXTERN void *pn_list_get(pn_list_t *list, int index); PN_EXTERN void pn_list_set(pn_list_t *list, int index, void *value); @@ -139,7 +137,7 @@ PN_EXTERN void pn_list_iterator(pn_list_ #define PN_REFCOUNT_VALUE (0x4) PN_EXTERN pn_map_t *pn_map(const pn_class_t *key, const pn_class_t *value, - size_t capacity, float load_factor, int options); + size_t capacity, float load_factor); PN_EXTERN size_t pn_map_size(pn_map_t *map); PN_EXTERN int pn_map_put(pn_map_t *map, void *key, void *value); PN_EXTERN void *pn_map_get(pn_map_t *map, void *key); @@ -149,7 +147,7 @@ PN_EXTERN pn_handle_t pn_map_next(pn_map PN_EXTERN void *pn_map_key(pn_map_t *map, pn_handle_t entry); PN_EXTERN void *pn_map_value(pn_map_t *map, pn_handle_t entry); -PN_EXTERN pn_hash_t *pn_hash(const pn_class_t *clazz, size_t capacity, float load_factor, int options); +PN_EXTERN pn_hash_t *pn_hash(const pn_class_t *clazz, size_t capacity, float load_factor); PN_EXTERN size_t pn_hash_size(pn_hash_t *hash); PN_EXTERN int pn_hash_put(pn_hash_t *hash, uintptr_t key, void *value); PN_EXTERN void *pn_hash_get(pn_hash_t *hash, uintptr_t key); Modified: qpid/proton/branches/examples/proton-c/src/engine/engine.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/engine/engine.c?rev=1630816r1=1630815r2=1630816view=diff == --- qpid/proton/branches/examples/proton-c/src/engine/engine.c (original) +++ qpid/proton/branches/examples/proton-c/src/engine/engine.c Fri Oct 10 12:51:03 2014 @@ -379,7 +379,7 @@ pn_connection_t *pn_connection() pn_endpoint_init(conn-endpoint, CONNECTION, conn); conn-transport_head = NULL; conn-transport_tail = NULL; - conn-sessions = pn_list(PN_OBJECT, 0, 0); + conn-sessions = pn_list(PN_WEAKREF, 0); conn-transport = NULL; conn-work_head = NULL; conn-work_tail = NULL; @@ -723,7 +723,7 @@
svn commit: r1630818 - in /qpid/proton/branches/examples: proton-c/bindings/python/cproton.i proton-c/bindings/python/proton.py proton-j/src/main/resources/cobject.py
Author: gsim Date: Fri Oct 10 12:51:26 2014 New Revision: 1630818 URL: http://svn.apache.org/r1630818 Log: centralized void/PyObject conversion Modified: qpid/proton/branches/examples/proton-c/bindings/python/cproton.i qpid/proton/branches/examples/proton-c/bindings/python/proton.py qpid/proton/branches/examples/proton-j/src/main/resources/cobject.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/cproton.i URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/cproton.i?rev=1630818r1=1630817r2=1630818view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/cproton.i (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/cproton.i Fri Oct 10 12:51:26 2014 @@ -184,154 +184,6 @@ ssize_t pn_transport_push(pn_transport_t %} %ignore pn_message_data; -%rename(pn_listener_set_context) wrap_pn_listener_set_context; -%inline { - void wrap_pn_listener_set_context(pn_listener_t *l, PyObject *context) { -// don't incref context: we 'borrow' the reference - prevents -// reference loops. Should be safe as the Python object must -// outlive the C object. -pn_listener_set_context(l, context); - } -} -%ignore pn_listener_set_context; - -%rename(pn_listener_context) wrap_pn_listener_context; -%inline { - PyObject *wrap_pn_listener_context(pn_listener_t *l) { -PyObject *result = (PyObject *) pn_listener_context(l); -// incref the returned context, as the caller expects this -if (result) { - Py_INCREF(result); - return result; -} else { - Py_RETURN_NONE; -} - } -} -%ignore pn_listener_context; - -%rename(pn_connector_set_context) wrap_pn_connector_set_context; -%inline { - void wrap_pn_connector_set_context(pn_connector_t *c, PyObject *context) { -// don't incref context: we 'borrow' the reference - prevents -// reference loops. Should be safe as the Python object must -// outlive the C object. -pn_connector_set_context(c, context); - } -} -%ignore pn_connector_set_context; - -%rename(pn_connector_context) wrap_pn_connector_context; -%inline { - PyObject *wrap_pn_connector_context(pn_connector_t *c) { -PyObject *result = (PyObject *) pn_connector_context(c); -// incref the returned context, as the caller expects this -if (result) { - Py_INCREF(result); - return result; -} else { - Py_RETURN_NONE; -} - } -} -%ignore pn_connector_context; - -%rename(pn_connection_get_context) wrap_pn_connection_get_context; -%inline { - PyObject *wrap_pn_connection_get_context(pn_connection_t *c) { -PyObject *result = (PyObject *) pn_connection_get_context(c); -// incref the returned context, as the caller expects this -if (result) { - Py_INCREF(result); - return result; -} else { - Py_RETURN_NONE; -} - } -} -%ignore pn_connection_get_context; - -%rename(pn_connection_set_context) wrap_pn_connection_set_context; -%inline { - void wrap_pn_connection_set_context(pn_connection_t *c, PyObject *context) { -// don't incref context: we 'borrow' the reference -pn_connection_set_context(c, context); - } -} -%ignore pn_connection_set_context; - -%rename(pn_session_get_context) wrap_pn_session_get_context; -%inline { - PyObject *wrap_pn_session_get_context(pn_session_t *s) { -PyObject *result = (PyObject *) pn_session_get_context(s); -// incref the returned context, as the caller expects this -if (result) { - Py_INCREF(result); - return result; -} else { - Py_RETURN_NONE; -} - } -} -%ignore pn_session_get_context; - -%rename(pn_session_set_context) wrap_pn_session_set_context; -%inline { - void wrap_pn_session_set_context(pn_session_t *s, PyObject *context) { -// don't incref context: we 'borrow' the reference -pn_session_set_context(s, context); - } -} -%ignore pn_session_set_context; - -%rename(pn_link_get_context) wrap_pn_link_get_context; -%inline { - PyObject *wrap_pn_link_get_context(pn_link_t *l) { -PyObject *result = (PyObject *) pn_link_get_context(l); -// incref the returned context, as the caller expects this -if (result) { - Py_INCREF(result); - return result; -} else { - Py_RETURN_NONE; -} - } -} -%ignore pn_link_get_context; - -%rename(pn_link_set_context) wrap_pn_link_set_context; -%inline { - void wrap_pn_link_set_context(pn_link_t *l, PyObject *context) { -// don't incref context: we 'borrow' the reference -pn_link_set_context(l, context); - } -} -%ignore pn_link_set_context; - -%rename(pn_delivery_get_context) wrap_pn_delivery_get_context; -%inline { - PyObject *wrap_pn_delivery_get_context(pn_delivery_t *d) { -PyObject *result = (PyObject *) pn_delivery_get_context(d); -// incref the returned context, as the caller expects this -if (result) { - Py_INCREF(result); - return result; -}
svn commit: r1630820 - in /qpid/proton/branches/examples/proton-c: include/proton/ src/messenger/ src/object/ src/tests/
Author: gsim Date: Fri Oct 10 12:51:41 2014 New Revision: 1630820 URL: http://svn.apache.org/r1630820 Log: added class ids Added: qpid/proton/branches/examples/proton-c/include/proton/cid.h Modified: qpid/proton/branches/examples/proton-c/include/proton/object.h qpid/proton/branches/examples/proton-c/src/messenger/store.c qpid/proton/branches/examples/proton-c/src/messenger/subscription.c qpid/proton/branches/examples/proton-c/src/messenger/transform.c qpid/proton/branches/examples/proton-c/src/object/iterator.c qpid/proton/branches/examples/proton-c/src/object/map.c qpid/proton/branches/examples/proton-c/src/object/object.c qpid/proton/branches/examples/proton-c/src/tests/object.c Added: qpid/proton/branches/examples/proton-c/include/proton/cid.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/cid.h?rev=1630820view=auto == --- qpid/proton/branches/examples/proton-c/include/proton/cid.h (added) +++ qpid/proton/branches/examples/proton-c/include/proton/cid.h Fri Oct 10 12:51:41 2014 @@ -0,0 +1,54 @@ +#ifndef PROTON_CID_H +#define PROTON_CID_H 1 +/* + * + * 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. + * + */ + +typedef enum { + CID_pn_object = 1, + CID_pn_void, + CID_pn_weakref, + + CID_pn_string, + CID_pn_list, + CID_pn_map, + CID_pn_hash, + + CID_pn_collector, + CID_pn_event, + + CID_pn_encoder, + CID_pn_decoder, + CID_pn_data, + + CID_pn_connection, + CID_pn_session, + CID_pn_link, + CID_pn_delivery, + CID_pn_transport, + + CID_pn_message, + + CID_pn_io, + CID_pn_selector, + CID_pn_selectable +} pn_cid_t; + +#endif /* cid.h */ Modified: qpid/proton/branches/examples/proton-c/include/proton/object.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/object.h?rev=1630820r1=1630819r2=1630820view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/object.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/object.h Fri Oct 10 12:51:41 2014 @@ -22,6 +22,7 @@ * */ +#include proton/cid.h #include proton/types.h #include stdarg.h #include proton/type_compat.h @@ -45,6 +46,7 @@ typedef struct pn_iterator_t pn_iterator struct pn_class_t { const char *name; + const pn_cid_t cid; void *(*newinst)(const pn_class_t *, size_t); void (*initialize)(void *); void (*incref)(void *); @@ -64,6 +66,7 @@ PN_EXTERN extern const pn_class_t *PN_WE #define PN_CLASS(PREFIX) { \ #PREFIX,\ +CID_ ## PREFIX, \ pn_object_new, \ PREFIX ## _initialize, \ pn_object_incref, \ @@ -79,6 +82,7 @@ PN_EXTERN extern const pn_class_t *PN_WE #define PN_METACLASS(PREFIX) { \ #PREFIX,\ +CID_ ## PREFIX, \ PREFIX ## _new, \ PREFIX ## _initialize, \ PREFIX ## _incref, \ @@ -92,6 +96,7 @@ PN_EXTERN extern const pn_class_t *PN_WE PREFIX ## _inspect \ } +PN_EXTERN pn_cid_t pn_class_id(const pn_class_t *clazz); PN_EXTERN const char *pn_class_name(const pn_class_t *clazz); PN_EXTERN void *pn_class_new(const pn_class_t *clazz, size_t size); PN_EXTERN void *pn_class_incref(const pn_class_t *clazz, void *object); Modified: qpid/proton/branches/examples/proton-c/src/messenger/store.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/messenger/store.c?rev=1630820r1=1630819r2=1630820view=diff == --- qpid/proton/branches/examples/proton-c/src/messenger/store.c (original) +++ qpid/proton/branches/examples/proton-c/src/messenger/store.c Fri Oct 10 12:51:41 2014 @@ -197,6 +197,7 @@ pni_stream_t *pni_stream_get(pni_store_t return pni_stream(store, address, false); }
svn commit: r1630819 - in /qpid/proton/branches/examples/proton-c: bindings/python/ include/proton/ src/object/ src/windows/
Author: gsim Date: Fri Oct 10 12:51:33 2014 New Revision: 1630819 URL: http://svn.apache.org/r1630819 Log: PROTON-686, PROTON-???: Fix recent changes to compile on windows Modified: qpid/proton/branches/examples/proton-c/bindings/python/cproton.i qpid/proton/branches/examples/proton-c/include/proton/event.h qpid/proton/branches/examples/proton-c/include/proton/object.h qpid/proton/branches/examples/proton-c/src/object/string.c qpid/proton/branches/examples/proton-c/src/windows/io.c qpid/proton/branches/examples/proton-c/src/windows/iocp.c qpid/proton/branches/examples/proton-c/src/windows/iocp.h qpid/proton/branches/examples/proton-c/src/windows/selector.c qpid/proton/branches/examples/proton-c/src/windows/write_pipeline.c Modified: qpid/proton/branches/examples/proton-c/bindings/python/cproton.i URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/cproton.i?rev=1630819r1=1630818r2=1630819view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/cproton.i (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/cproton.i Fri Oct 10 12:51:33 2014 @@ -234,8 +234,9 @@ int pn_ssl_get_peer_hostname(pn_ssl_t *s PyObject *pn_void2py(void *object) { if (object) { - Py_INCREF(object); - return object; + PyObject* p = (PyObject*) object; + Py_INCREF(p); + return p; } else { Py_RETURN_NONE; } Modified: qpid/proton/branches/examples/proton-c/include/proton/event.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/event.h?rev=1630819r1=1630818r2=1630819view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/event.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/event.h Fri Oct 10 12:51:33 2014 @@ -272,9 +272,9 @@ PN_EXTERN void pn_collector_free(pn_coll * was elided */ -pn_event_t *pn_collector_put(pn_collector_t *collector, - const pn_class_t *clazz, void *context, - pn_event_type_t type); +PN_EXTERN pn_event_t *pn_collector_put(pn_collector_t *collector, + const pn_class_t *clazz, void *context, + pn_event_type_t type); /** * Access the head event contained by a collector. Modified: qpid/proton/branches/examples/proton-c/include/proton/object.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/object.h?rev=1630819r1=1630818r2=1630819view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/object.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/object.h Fri Oct 10 12:51:33 2014 @@ -58,9 +58,9 @@ struct pn_class_t { int (*inspect)(void *, pn_string_t *); }; -extern const pn_class_t *PN_OBJECT; -extern const pn_class_t *PN_VOID; -extern const pn_class_t *PN_WEAKREF; +PN_EXTERN extern const pn_class_t *PN_OBJECT; +PN_EXTERN extern const pn_class_t *PN_VOID; +PN_EXTERN extern const pn_class_t *PN_WEAKREF; #define PN_CLASS(PREFIX) { \ #PREFIX,\ Modified: qpid/proton/branches/examples/proton-c/src/object/string.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/object/string.c?rev=1630819r1=1630818r2=1630819view=diff == --- qpid/proton/branches/examples/proton-c/src/object/string.c (original) +++ qpid/proton/branches/examples/proton-c/src/object/string.c Fri Oct 10 12:51:33 2014 @@ -19,8 +19,11 @@ * */ +#include platform.h + #include proton/error.h #include proton/object.h + #include stdio.h #include stdlib.h #include string.h Modified: qpid/proton/branches/examples/proton-c/src/windows/io.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/windows/io.c?rev=1630819r1=1630818r2=1630819view=diff == --- qpid/proton/branches/examples/proton-c/src/windows/io.c (original) +++ qpid/proton/branches/examples/proton-c/src/windows/io.c Fri Oct 10 12:51:33 2014 @@ -103,7 +103,7 @@ void pn_io_finalize(void *obj) pn_io_t *pn_io(void) { static const pn_class_t clazz = PN_CLASS(pn_io); - pn_io_t *io = (pn_io_t *) pn_new(sizeof(pn_io_t), clazz); + pn_io_t *io = (pn_io_t *) pn_class_new(clazz, sizeof(pn_io_t)); return io; } Modified: qpid/proton/branches/examples/proton-c/src/windows/iocp.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/windows/iocp.c?rev=1630819r1=1630818r2=1630819view=diff
svn commit: r1630821 - in /qpid/proton/branches/examples/proton-c: bindings/python/proton.py include/proton/event.h src/engine/engine.c src/events/event.c
Author: gsim Date: Fri Oct 10 12:51:48 2014 New Revision: 1630821 URL: http://svn.apache.org/r1630821 Log: removed event categories in favor of class ids Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py qpid/proton/branches/examples/proton-c/include/proton/event.h qpid/proton/branches/examples/proton-c/src/engine/engine.c qpid/proton/branches/examples/proton-c/src/events/event.c Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630821r1=1630820r2=1630821view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:51:48 2014 @@ -3362,12 +3362,6 @@ class Collector: class Event: - CATEGORY_CONNECTION = PN_EVENT_CATEGORY_CONNECTION - CATEGORY_SESSION = PN_EVENT_CATEGORY_SESSION - CATEGORY_LINK = PN_EVENT_CATEGORY_LINK - CATEGORY_DELIVERY = PN_EVENT_CATEGORY_DELIVERY - CATEGORY_TRANSPORT = PN_EVENT_CATEGORY_TRANSPORT - CONNECTION_INIT = PN_CONNECTION_INIT CONNECTION_OPEN = PN_CONNECTION_OPEN CONNECTION_CLOSE = PN_CONNECTION_CLOSE Modified: qpid/proton/branches/examples/proton-c/include/proton/event.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/event.h?rev=1630821r1=1630820r2=1630821view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/event.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/event.h Fri Oct 10 12:51:48 2014 @@ -77,19 +77,6 @@ extern C { typedef struct pn_event_t pn_event_t; /** - * Related events are grouped into categories - */ -typedef enum { -PN_EVENT_CATEGORY_NONE = 0, -PN_EVENT_CATEGORY_CONNECTION = 0x0001, -PN_EVENT_CATEGORY_SESSION = 0x0002, -PN_EVENT_CATEGORY_LINK = 0x0003, -PN_EVENT_CATEGORY_DELIVERY = 0x0004, -PN_EVENT_CATEGORY_TRANSPORT = 0x0005, -PN_EVENT_CATEGORY_COUNT = 6 -} pn_event_category_t; - -/** * An event type. */ typedef enum { @@ -104,130 +91,130 @@ typedef enum { * will ever be issued for a connection. Events of this type point * to the relevant connection. */ - PN_CONNECTION_INIT = PN_EVENT_CATEGORY_CONNECTION + 1, + PN_CONNECTION_INIT = 1, /** * The local connection endpoint has been closed. Events of this * type point to the relevant connection. */ - PN_CONNECTION_OPEN = PN_EVENT_CATEGORY_CONNECTION + 2, + PN_CONNECTION_OPEN = 2, /** * The remote endpoint has opened the connection. Events of this * type point to the relevant connection. */ - PN_CONNECTION_REMOTE_OPEN = PN_EVENT_CATEGORY_CONNECTION + 3, + PN_CONNECTION_REMOTE_OPEN = 3, /** * The local connection endpoint has been closed. Events of this * type point to the relevant connection. */ - PN_CONNECTION_CLOSE = PN_EVENT_CATEGORY_CONNECTION + 4, + PN_CONNECTION_CLOSE = 4, /** * The remote endpoint has closed the connection. Events of this * type point to the relevant connection. */ - PN_CONNECTION_REMOTE_CLOSE = PN_EVENT_CATEGORY_CONNECTION + 5, + PN_CONNECTION_REMOTE_CLOSE = 5, /** * The connection has been freed and any outstanding processing has * been completed. This is the final event that will ever be issued * for a connection. */ - PN_CONNECTION_FINAL = PN_EVENT_CATEGORY_CONNECTION + 6, + PN_CONNECTION_FINAL = 6, /** * The session has been created. This is the first event that will * ever be issued for a session. */ - PN_SESSION_INIT = PN_EVENT_CATEGORY_SESSION + 1, + PN_SESSION_INIT = 11, /** * The local session endpoint has been opened. Events of this type * point ot the relevant session. */ - PN_SESSION_OPEN = PN_EVENT_CATEGORY_SESSION + 2, + PN_SESSION_OPEN = 12, /** * The remote endpoint has opened the session. Events of this type * point to the relevant session. */ - PN_SESSION_REMOTE_OPEN = PN_EVENT_CATEGORY_SESSION + 3, + PN_SESSION_REMOTE_OPEN = 13, /** * The local session endpoint has been closed. Events of this type * point ot the relevant session. */ - PN_SESSION_CLOSE = PN_EVENT_CATEGORY_SESSION + 4, + PN_SESSION_CLOSE = 14, /** * The remote endpoint has closed the session. Events of this type * point to the relevant session. */ - PN_SESSION_REMOTE_CLOSE = PN_EVENT_CATEGORY_SESSION + 5, + PN_SESSION_REMOTE_CLOSE = 15, /** * The session has been freed and any outstanding processing has * been completed. This is the final event that will ever be issued * for a session. */ - PN_SESSION_FINAL = PN_EVENT_CATEGORY_SESSION + 6, + PN_SESSION_FINAL = 16, /** * The link
svn commit: r1630822 - in /qpid/proton/branches/examples: proton-c/bindings/python/ proton-c/include/proton/ proton-c/src/engine/ proton-c/src/events/ proton-c/src/messenger/ proton-c/src/ssl/ proton-
Author: gsim Date: Fri Oct 10 12:52:17 2014 New Revision: 1630822 URL: http://svn.apache.org/r1630822 Log: Added events: PN_CONNECTION_BOUND/UNBOUND, PN_TRANSPORT_HEAD_CLOSED, PN_TRANSPORT_TAIL_CLOSED, PN_TRANSPORT_CLOSED, and PN_TRANSPORT_ERROR. This should address PROTON-656 Added: qpid/proton/branches/examples/tests/python/proton_tests/scratch.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py qpid/proton/branches/examples/proton-c/include/proton/event.h qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h qpid/proton/branches/examples/proton-c/src/events/event.c qpid/proton/branches/examples/proton-c/src/messenger/messenger.c qpid/proton/branches/examples/proton-c/src/ssl/openssl.c qpid/proton/branches/examples/proton-c/src/transport/transport.c qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java qpid/proton/branches/examples/proton-j/src/main/resources/cengine.py qpid/proton/branches/examples/tests/python/proton_tests/engine.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630822r1=1630821r2=1630822view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:52:17 2014 @@ -3363,6 +3363,8 @@ class Collector: class Event: CONNECTION_INIT = PN_CONNECTION_INIT + CONNECTION_BOUND = PN_CONNECTION_BOUND + CONNECTION_UNBOUND = PN_CONNECTION_UNBOUND CONNECTION_OPEN = PN_CONNECTION_OPEN CONNECTION_CLOSE = PN_CONNECTION_CLOSE CONNECTION_REMOTE_OPEN = PN_CONNECTION_REMOTE_OPEN @@ -3385,7 +3387,12 @@ class Event: LINK_FINAL = PN_LINK_FINAL DELIVERY = PN_DELIVERY + TRANSPORT = PN_TRANSPORT + TRANSPORT_ERROR = PN_TRANSPORT_ERROR + TRANSPORT_HEAD_CLOSED = PN_TRANSPORT_HEAD_CLOSED + TRANSPORT_TAIL_CLOSED = PN_TRANSPORT_TAIL_CLOSED + TRANSPORT_CLOSED = PN_TRANSPORT_CLOSED def __init__(self, clazz, context, type): self.clazz = clazz Modified: qpid/proton/branches/examples/proton-c/include/proton/event.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/event.h?rev=1630822r1=1630821r2=1630822view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/event.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/event.h Fri Oct 10 12:52:17 2014 @@ -91,130 +91,148 @@ typedef enum { * will ever be issued for a connection. Events of this type point * to the relevant connection. */ - PN_CONNECTION_INIT = 1, + PN_CONNECTION_INIT, + + /** + * The connection has been bound to a transport. + */ + PN_CONNECTION_BOUND, + + /** + * The connection has been unbound from its transport. + */ + PN_CONNECTION_UNBOUND, /** * The local connection endpoint has been closed. Events of this * type point to the relevant connection. */ - PN_CONNECTION_OPEN = 2, + PN_CONNECTION_OPEN, /** * The remote endpoint has opened the connection. Events of this * type point to the relevant connection. */ - PN_CONNECTION_REMOTE_OPEN = 3, + PN_CONNECTION_REMOTE_OPEN, /** * The local connection endpoint has been closed. Events of this * type point to the relevant connection. */ - PN_CONNECTION_CLOSE = 4, + PN_CONNECTION_CLOSE, /** * The remote endpoint has closed the connection. Events of this * type point to the relevant connection. */ - PN_CONNECTION_REMOTE_CLOSE = 5, + PN_CONNECTION_REMOTE_CLOSE, /** * The connection has been freed and any outstanding processing has * been completed. This is the final event that will ever be issued * for a connection. */ - PN_CONNECTION_FINAL = 6, + PN_CONNECTION_FINAL, /** * The session has been created. This is the first event that will * ever be issued for a session. */ - PN_SESSION_INIT = 11, + PN_SESSION_INIT, /** * The local session endpoint has been opened. Events of this type * point ot the relevant session. */ - PN_SESSION_OPEN = 12, + PN_SESSION_OPEN, /** * The remote endpoint has opened the session. Events of this type * point to the relevant session. */ - PN_SESSION_REMOTE_OPEN = 13, + PN_SESSION_REMOTE_OPEN, /** * The local session endpoint has been closed. Events of this type * point ot the relevant session. */ - PN_SESSION_CLOSE = 14, + PN_SESSION_CLOSE,
svn commit: r1630823 - /qpid/proton/branches/examples/CMakeLists.txt
Author: gsim Date: Fri Oct 10 12:52:33 2014 New Revision: 1630823 URL: http://svn.apache.org/r1630823 Log: removed sysinstall warning Modified: qpid/proton/branches/examples/CMakeLists.txt Modified: qpid/proton/branches/examples/CMakeLists.txt URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/CMakeLists.txt?rev=1630823r1=1630822r2=1630823view=diff == --- qpid/proton/branches/examples/CMakeLists.txt (original) +++ qpid/proton/branches/examples/CMakeLists.txt Fri Oct 10 12:52:33 2014 @@ -85,12 +85,7 @@ mark_as_advanced (INCLUDE_INSTALL_DIR LI # system specified locations. set (BINDINGS_DIR ${LIB_INSTALL_DIR}/proton/bindings) -set (SYSINSTALL_BINDINGS *UNSPECIFIED* CACHE BOOL If SYSINSTALL_BINDINGS is OFF then proton bindings will be installed underneath ${BINDINGS_DIR} and each user will need to modify their interpreter configuration to load the appropriate binding. If SYSINSTALL_BINDINGS is ON, then each language interpreter will be queried for the appropriate directory and proton bindings will be installed and available system wide with no additional per user configuration.) - -if (SYSINSTALL_BINDINGS STREQUAL *UNSPECIFIED*) - message(WARNING SYSINSTALL_BINDINGS is unspecified, defaulting it to OFF. Please note that the default install behaviour of proton has changed. Proton bindings by default will now be installed under ${BINDINGS_DIR} and will no longer be found by system interpreters. This means that every user will be required to manually configure their interpreters to locate the proton bindings. If you wish proton bindings to be installed into the interpreter specified locations as was the default in prior releases, please specify -DSYSINSTALL_BINDINGS=ON) - set (SYSINSTALL_BINDINGS OFF) -endif () +set (SYSINSTALL_BINDINGS OFF CACHE BOOL If SYSINSTALL_BINDINGS is OFF then proton bindings will be installed underneath ${BINDINGS_DIR} and each user will need to modify their interpreter configuration to load the appropriate binding. If SYSINSTALL_BINDINGS is ON, then each language interpreter will be queried for the appropriate directory and proton bindings will be installed and available system wide with no additional per user configuration.) set (BINDING_LANGS PERL PHP PYTHON RUBY) - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630824 - in /qpid/proton/branches/examples/proton-c: bindings/python/cproton.i bindings/python/proton.py include/proton/object.h src/object/object.c
Author: gsim Date: Fri Oct 10 12:53:38 2014 New Revision: 1630824 URL: http://svn.apache.org/r1630824 Log: fixed refcounting bug for posting python objects to a collector Modified: qpid/proton/branches/examples/proton-c/bindings/python/cproton.i qpid/proton/branches/examples/proton-c/bindings/python/proton.py qpid/proton/branches/examples/proton-c/include/proton/object.h qpid/proton/branches/examples/proton-c/src/object/object.c Modified: qpid/proton/branches/examples/proton-c/bindings/python/cproton.i URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/cproton.i?rev=1630824r1=1630823r2=1630824view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/cproton.i (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/cproton.i Fri Oct 10 12:53:38 2014 @@ -227,7 +227,38 @@ bool pn_ssl_get_protocol_name(pn_ssl_t * int pn_ssl_get_peer_hostname(pn_ssl_t *ssl, char *OUTPUT, size_t *OUTPUT_SIZE); %ignore pn_ssl_get_peer_hostname; +%immutable PN_PYREF; %inline %{ + PN_EXTERN extern const pn_class_t *PN_PYREF; + + #define CID_pn_pyref CID_pn_void + #define pn_pyref_new NULL + #define pn_pyref_initialize NULL + #define pn_pyref_finalize NULL + #define pn_pyref_free NULL + #define pn_pyref_hashcode pn_void_hashcode + #define pn_pyref_compare pn_void_compare + #define pn_pyref_inspect pn_void_inspect + + static void pn_pyref_incref(void *object) { +Py_XINCREF(object); + } + + static void pn_pyref_decref(void *object) { +Py_XDECREF(object); + } + + static int pn_pyref_refcount(void *object) { +return 1; + } + + static const pn_class_t *pn_pyref_reify(void *object) { +return PN_PYREF; + } + + PN_EXTERN const pn_class_t PNI_PYREF = PN_METACLASS(pn_pyref); + PN_EXTERN const pn_class_t *PN_PYREF = PNI_PYREF; + void *pn_py2void(PyObject *object) { return object; } Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630824r1=1630823r2=1630824view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:53:38 2014 @@ -3326,6 +3326,7 @@ class SSLSessionDetails(object): wrappers = { pn_void: lambda x: pn_void2py(x), + pn_pyref: lambda x: pn_void2py(x), pn_connection: lambda x: Connection._wrap_connection(pn_cast_pn_connection(x)), pn_session: lambda x: Session._wrap_session(pn_cast_pn_session(x)), pn_link: lambda x: Link._wrap_link(pn_cast_pn_link(x)), @@ -3340,7 +3341,7 @@ class Collector: self._contexts = set() def put(self, obj, etype): -pn_collector_put(self._impl, PN_VOID, pn_py2void(obj), etype) +pn_collector_put(self._impl, PN_PYREF, pn_py2void(obj), etype) def peek(self): event = pn_collector_peek(self._impl) Modified: qpid/proton/branches/examples/proton-c/include/proton/object.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/object.h?rev=1630824r1=1630823r2=1630824view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/object.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/object.h Fri Oct 10 12:53:38 2014 @@ -109,6 +109,10 @@ PN_EXTERN intptr_t pn_class_compare(cons PN_EXTERN bool pn_class_equals(const pn_class_t *clazz, void *a, void *b); PN_EXTERN int pn_class_inspect(const pn_class_t *clazz, void *object, pn_string_t *dst); +PN_EXTERN uintptr_t pn_void_hashcode(void *object); +PN_EXTERN intptr_t pn_void_compare(void *a, void *b); +PN_EXTERN int pn_void_inspect(void *object, pn_string_t *dst); + PN_EXTERN void *pn_object_new(const pn_class_t *clazz, size_t size); PN_EXTERN const pn_class_t *pn_object_reify(void *object); PN_EXTERN void pn_object_incref(void *object); Modified: qpid/proton/branches/examples/proton-c/src/object/object.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/object/object.c?rev=1630824r1=1630823r2=1630824view=diff == --- qpid/proton/branches/examples/proton-c/src/object/object.c (original) +++ qpid/proton/branches/examples/proton-c/src/object/object.c Fri Oct 10 12:53:38 2014 @@ -40,9 +40,9 @@ static int pn_void_refcount(void *object #define pn_void_finalize NULL static void pn_void_free(void *object) { free(object); } static const pn_class_t *pn_void_reify(void *object) { return PN_VOID; } -static uintptr_t pn_void_hashcode(void *object) { return (uintptr_t) object; } -static intptr_t pn_void_compare(void *a, void *b) { return (intptr_t) b -
svn commit: r1630826 - in /qpid/proton/branches/examples/proton-c/src/windows: iocp.c selector.c
Author: gsim Date: Fri Oct 10 12:53:55 2014 New Revision: 1630826 URL: http://svn.apache.org/r1630826 Log: QPID-690: object/list/hash changes affecting Windows components Modified: qpid/proton/branches/examples/proton-c/src/windows/iocp.c qpid/proton/branches/examples/proton-c/src/windows/selector.c Modified: qpid/proton/branches/examples/proton-c/src/windows/iocp.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/windows/iocp.c?rev=1630826r1=1630825r2=1630826view=diff == --- qpid/proton/branches/examples/proton-c/src/windows/iocp.c (original) +++ qpid/proton/branches/examples/proton-c/src/windows/iocp.c Fri Oct 10 12:53:55 2014 @@ -191,7 +191,7 @@ struct pni_acceptor_t { static void pni_acceptor_initialize(void *object) { pni_acceptor_t *acceptor = (pni_acceptor_t *) object; - acceptor-accepts = pn_list(PN_OBJECT, IOCP_MAX_ACCEPTS); + acceptor-accepts = pn_list(PN_VOID, IOCP_MAX_ACCEPTS); } static void pni_acceptor_finalize(void *object) @@ -199,7 +199,7 @@ static void pni_acceptor_finalize(void * pni_acceptor_t *acceptor = (pni_acceptor_t *) object; size_t len = pn_list_size(acceptor-accepts); for (size_t i = 0; i len; i++) -pn_free(pn_list_get(acceptor-accepts, i)); +free(pn_list_get(acceptor-accepts, i)); pn_free(acceptor-accepts); } @@ -221,7 +221,7 @@ static void begin_accept(pni_acceptor_t { if (acceptor-listen_sock-closing) { if (result) { - pn_free(result); + free(result); acceptor-accept_queue_size--; } if (acceptor-accept_queue_size == 0) @@ -272,7 +272,7 @@ static void complete_accept(accept_resul if (ld-read_closed) { if (!result-new_sock-closing) pni_iocp_begin_close(result-new_sock); -pn_free(result);// discard +free(result);// discard reap_check(ld); } else { result-base.status = status; @@ -985,7 +985,7 @@ static void drain_zombie_completions(ioc static pn_list_t *iocp_map_close_all(iocp_t *iocp) { // Zombify stragglers, i.e. no pn_close() from the application. - pn_list_t *externals = pn_list(0, PN_REFCOUNT); + pn_list_t *externals = pn_list(PN_OBJECT, 0); for (pn_handle_t entry = pn_hash_head(iocp-iocpdesc_map); entry; entry = pn_hash_next(iocp-iocpdesc_map, entry)) { iocpdesc_t *iocpd = (iocpdesc_t *) pn_hash_value(iocp-iocpdesc_map, entry); @@ -1103,8 +1103,8 @@ void pni_iocp_initialize(void *obj) pni_shared_pool_create(iocp); iocp-completion_port = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0); assert(iocp-completion_port != NULL); - iocp-iocpdesc_map = pn_hash(0, 0.75, PN_REFCOUNT); - iocp-zombie_list = pn_list(0, PN_REFCOUNT); + iocp-iocpdesc_map = pn_hash(PN_OBJECT, 0, 0.75); + iocp-zombie_list = pn_list(PN_OBJECT, 0); iocp-iocp_trace = pn_env_bool(PN_TRACE_DRV); iocp-selector = NULL; } Modified: qpid/proton/branches/examples/proton-c/src/windows/selector.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/windows/selector.c?rev=1630826r1=1630825r2=1630826view=diff == --- qpid/proton/branches/examples/proton-c/src/windows/selector.c (original) +++ qpid/proton/branches/examples/proton-c/src/windows/selector.c Fri Oct 10 12:53:55 2014 @@ -65,8 +65,8 @@ void pn_selector_initialize(void *obj) selector-iocp = NULL; selector-deadlines = NULL; selector-capacity = 0; - selector-selectables = pn_list(0, 0); - selector-iocp_descriptors = pn_list(0, PN_REFCOUNT); + selector-selectables = pn_list(PN_WEAKREF, 0); + selector-iocp_descriptors = pn_list(PN_OBJECT, 0); selector-deadline = 0; selector-current = 0; selector-current_triggered = NULL; - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630825 - in /qpid/proton/branches/examples/proton-c: bindings/python/cproton.i src/windows/iocp.c src/windows/write_pipeline.c
Author: gsim Date: Fri Oct 10 12:53:51 2014 New Revision: 1630825 URL: http://svn.apache.org/r1630825 Log: PROTON-???: Make previous changes compile under Windows Modified: qpid/proton/branches/examples/proton-c/bindings/python/cproton.i qpid/proton/branches/examples/proton-c/src/windows/iocp.c qpid/proton/branches/examples/proton-c/src/windows/write_pipeline.c Modified: qpid/proton/branches/examples/proton-c/bindings/python/cproton.i URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/cproton.i?rev=1630825r1=1630824r2=1630825view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/cproton.i (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/cproton.i Fri Oct 10 12:53:51 2014 @@ -229,7 +229,7 @@ int pn_ssl_get_peer_hostname(pn_ssl_t *s %immutable PN_PYREF; %inline %{ - PN_EXTERN extern const pn_class_t *PN_PYREF; + extern const pn_class_t *PN_PYREF; #define CID_pn_pyref CID_pn_void #define pn_pyref_new NULL @@ -256,8 +256,8 @@ int pn_ssl_get_peer_hostname(pn_ssl_t *s return PN_PYREF; } - PN_EXTERN const pn_class_t PNI_PYREF = PN_METACLASS(pn_pyref); - PN_EXTERN const pn_class_t *PN_PYREF = PNI_PYREF; + const pn_class_t PNI_PYREF = PN_METACLASS(pn_pyref); + const pn_class_t *PN_PYREF = PNI_PYREF; void *pn_py2void(PyObject *object) { return object; Modified: qpid/proton/branches/examples/proton-c/src/windows/iocp.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/windows/iocp.c?rev=1630825r1=1630824r2=1630825view=diff == --- qpid/proton/branches/examples/proton-c/src/windows/iocp.c (original) +++ qpid/proton/branches/examples/proton-c/src/windows/iocp.c Fri Oct 10 12:53:51 2014 @@ -30,7 +30,7 @@ #include Ws2tcpip.h #define PN_WINAPI -#include ../platform.h +#include platform.h #include proton/object.h #include proton/io.h #include proton/selector.h @@ -205,6 +205,7 @@ static void pni_acceptor_finalize(void * static pni_acceptor_t *pni_acceptor(iocpdesc_t *iocpd) { + static const pn_cid_t CID_pni_acceptor = CID_pn_void; static const pn_class_t clazz = PN_CLASS(pni_acceptor); pni_acceptor_t *acceptor = (pni_acceptor_t *) pn_class_new(clazz, sizeof(pni_acceptor_t)); acceptor-listen_sock = iocpd; @@ -363,6 +364,7 @@ static void connect_result_finalize(void } static connect_result_t *connect_result(iocpdesc_t *iocpd, struct addrinfo *addr) { + static const pn_cid_t CID_connect_result = CID_pn_void; static const pn_class_t clazz = PN_CLASS(connect_result); connect_result_t *result = (connect_result_t *) pn_class_new(clazz, sizeof(connect_result_t)); if (result) { @@ -729,6 +731,7 @@ static uintptr_t pni_iocpdesc_hashcode(v // Reference counted in the iocpdesc map, zombie_list, selector. static iocpdesc_t *pni_iocpdesc(pn_socket_t s) { + static const pn_cid_t CID_pni_iocpdesc = CID_pn_void; static pn_class_t clazz = PN_CLASS(pni_iocpdesc); assert (s != INVALID_SOCKET); iocpdesc_t *iocpd = (iocpdesc_t *) pn_class_new(clazz, sizeof(iocpdesc_t)); @@ -1131,6 +1134,7 @@ void pni_iocp_finalize(void *obj) iocp_t *pni_iocp() { + static const pn_cid_t CID_pni_iocp = CID_pn_void; static const pn_class_t clazz = PN_CLASS(pni_iocp); iocp_t *iocp = (iocp_t *) pn_class_new(clazz, sizeof(iocp_t)); return iocp; Modified: qpid/proton/branches/examples/proton-c/src/windows/write_pipeline.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/windows/write_pipeline.c?rev=1630825r1=1630824r2=1630825view=diff == --- qpid/proton/branches/examples/proton-c/src/windows/write_pipeline.c (original) +++ qpid/proton/branches/examples/proton-c/src/windows/write_pipeline.c Fri Oct 10 12:53:51 2014 @@ -168,6 +168,7 @@ static void write_pipeline_finalize(void write_pipeline_t *pni_write_pipeline(iocpdesc_t *iocpd) { + static const pn_cid_t CID_write_pipeline = CID_pn_void; static const pn_class_t clazz = PN_CLASS(write_pipeline); write_pipeline_t *pipeline = (write_pipeline_t *) pn_class_new(clazz, sizeof(write_pipeline_t)); pipeline-iocpd = iocpd; - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630829 - in /qpid/proton/branches/examples/proton-c: include/proton/messenger.h src/messenger/messenger.c
Author: gsim Date: Fri Oct 10 12:54:13 2014 New Revision: 1630829 URL: http://svn.apache.org/r1630829 Log: PROTON-670: applied patch from dominic for link accessors Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/messenger.h?rev=1630829r1=1630828r2=1630829view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/messenger.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/messenger.h Fri Oct 10 12:54:13 2014 @@ -752,6 +752,16 @@ PN_EXTERN int pn_messenger_accept(pn_mes PN_EXTERN int pn_messenger_reject(pn_messenger_t *messenger, pn_tracker_t tracker, int flags); /** + * Get link for the message referenced by the given tracker. + * + * @param[in] messenger a messenger object + * @param[in] tracker a tracker object + * @return a pn_link_t or NULL if the link could not be determined. + */ +PN_EXTERN pn_link_t *pn_messenger_tracker_link(pn_messenger_t *messenger, + pn_tracker_t tracker); + +/** * Get the number of messages in the outgoing message queue of a * messenger. * Modified: qpid/proton/branches/examples/proton-c/src/messenger/messenger.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/messenger/messenger.c?rev=1630829r1=1630828r2=1630829view=diff == --- qpid/proton/branches/examples/proton-c/src/messenger/messenger.c (original) +++ qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Fri Oct 10 12:54:13 2014 @@ -2188,6 +2188,20 @@ int pn_messenger_reject(pn_messenger_t * PN_STATUS_REJECTED, flags, false, false); } +PN_EXTERN pn_link_t *pn_messenger_tracker_link(pn_messenger_t *messenger, + pn_tracker_t tracker) +{ + pni_store_t *store = pn_tracker_store(messenger, tracker); + pni_entry_t *e = pni_store_entry(store, pn_tracker_sequence(tracker)); + if (e) { +pn_delivery_t *d = pni_entry_get_delivery(e); +if (d) { + return pn_delivery_link(d); +} + } + return NULL; +} + int pn_messenger_queued(pn_messenger_t *messenger, bool sender) { if (!messenger) return 0; - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630827 - /qpid/proton/branches/examples/proton-c/bindings/python/cproton.i
Author: gsim Date: Fri Oct 10 12:54:02 2014 New Revision: 1630827 URL: http://svn.apache.org/r1630827 Log: PROTON-???: Fix the new python extension code to work with earlier pythons Modified: qpid/proton/branches/examples/proton-c/bindings/python/cproton.i Modified: qpid/proton/branches/examples/proton-c/bindings/python/cproton.i URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/cproton.i?rev=1630827r1=1630826r2=1630827view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/cproton.i (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/cproton.i Fri Oct 10 12:54:02 2014 @@ -241,11 +241,13 @@ int pn_ssl_get_peer_hostname(pn_ssl_t *s #define pn_pyref_inspect pn_void_inspect static void pn_pyref_incref(void *object) { -Py_XINCREF(object); +PyObject* p = (PyObject*) object; +Py_XINCREF(p); } static void pn_pyref_decref(void *object) { -Py_XDECREF(object); +PyObject* p = (PyObject*) object; +Py_XDECREF(p); } static int pn_pyref_refcount(void *object) { - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630830 - in /qpid/proton/branches/examples/proton-c: include/proton/messenger.h src/messenger/messenger.c
Author: gsim Date: Fri Oct 10 12:54:19 2014 New Revision: 1630830 URL: http://svn.apache.org/r1630830 Log: PROTON-671: patch for settlement modes from dominic Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/messenger.h?rev=1630830r1=1630829r2=1630830view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/messenger.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/messenger.h Fri Oct 10 12:54:19 2014 @@ -25,6 +25,9 @@ #include proton/import_export.h #include proton/message.h #include proton/selectable.h +#include proton/condition.h +#include proton/terminus.h +#include proton/link.h #ifdef __cplusplus extern C { @@ -932,6 +935,24 @@ PN_EXTERN int pn_messenger_set_flags(pn_ */ PN_EXTERN int pn_messenger_get_flags(pn_messenger_t *messenger); +/** + * Set the local sender settle mode for the underlying link. + * + * @param[in] messenger the messenger + * @param[in] mode the sender settle mode + */ +PN_EXTERN int pn_messenger_set_snd_settle_mode(pn_messenger_t *messenger, + const pn_snd_settle_mode_t mode); + +/** + * Set the local receiver settle mode for the underlying link. + * + * @param[in] messenger the messenger + * @param[in] mode the receiver settle mode + */ +PN_EXTERN int pn_messenger_set_rcv_settle_mode(pn_messenger_t *messenger, + const pn_rcv_settle_mode_t mode); + #ifdef __cplusplus } #endif Modified: qpid/proton/branches/examples/proton-c/src/messenger/messenger.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/messenger/messenger.c?rev=1630830r1=1630829r2=1630830view=diff == --- qpid/proton/branches/examples/proton-c/src/messenger/messenger.c (original) +++ qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Fri Oct 10 12:54:19 2014 @@ -101,6 +101,8 @@ struct pn_messenger_t { int draining; // # links in drain state int connection_error; int flags; + pn_snd_settle_mode_t snd_settle_mode; + pn_rcv_settle_mode_t rcv_settle_mode; bool blocking; bool passive; bool interrupted; @@ -645,6 +647,8 @@ pn_messenger_t *pn_messenger(const char m-domain = pn_string(NULL); m-connection_error = 0; m-flags = 0; +m-snd_settle_mode = PN_SND_SETTLED; +m-rcv_settle_mode = PN_RCV_FIRST; } return m; @@ -1681,9 +1685,9 @@ pn_link_t *pn_messenger_link(pn_messenge if ((sender pn_messenger_get_outgoing_window(messenger)) || (!sender pn_messenger_get_incoming_window(messenger))) { -// use explicit settlement via dispositions (not pre-settled) -pn_link_set_snd_settle_mode( link, PN_SND_UNSETTLED ); -pn_link_set_rcv_settle_mode( link, PN_RCV_SECOND ); +// use required settlement (defaults to sending pre-settled messages) +pn_link_set_snd_settle_mode(link, messenger-snd_settle_mode); +pn_link_set_rcv_settle_mode(link, messenger-rcv_settle_mode); } // XXX if (pn_streq(name, #)) { @@ -2263,3 +2267,21 @@ PN_EXTERN int pn_messenger_get_flags(pn_ { return messenger ? messenger-flags : 0; } + +int pn_messenger_set_snd_settle_mode(pn_messenger_t *messenger, + const pn_snd_settle_mode_t mode) +{ + if (!messenger) +return PN_ARG_ERR; + messenger-snd_settle_mode = mode; + return 0; +} + +int pn_messenger_set_rcv_settle_mode(pn_messenger_t *messenger, + const pn_rcv_settle_mode_t mode) +{ + if (!messenger) +return PN_ARG_ERR; + messenger-rcv_settle_mode = mode; + return 0; +} - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630828 - in /qpid/proton/branches/examples/proton-c: include/proton/messenger.h src/messenger/messenger.c src/messenger/transform.c src/messenger/transform.h
Author: gsim Date: Fri Oct 10 12:54:08 2014 New Revision: 1630828 URL: http://svn.apache.org/r1630828 Log: PROTON-669: applied patch from dominic for fail fast checking of messenger routes Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h qpid/proton/branches/examples/proton-c/src/messenger/messenger.c qpid/proton/branches/examples/proton-c/src/messenger/transform.c qpid/proton/branches/examples/proton-c/src/messenger/transform.h Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/messenger.h?rev=1630828r1=1630827r2=1630828view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/messenger.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/messenger.h Fri Oct 10 12:54:08 2014 @@ -900,6 +900,28 @@ PN_EXTERN pn_timestamp_t pn_messenger_de * @} */ +#define PN_FLAGS_CHECK_ROUTES \ + (0x1) /** Messenger flag to indicate that a call \ +to pn_messenger_start should check that \ +any defined routes are valid */ + +/** Sets control flags to enable additional function for the Messenger. + * + * @param[in] messenger the messenger + * @param[in] flags 0 or PN_FLAGS_CHECK_ROUTES + * + * @return an error code of zero if there is no error + */ +PN_EXTERN int pn_messenger_set_flags(pn_messenger_t *messenger, + const int flags); + +/** Gets the flags for a Messenger. + * + * @param[in] messenger the messenger + * @return The flags set for the messenger + */ +PN_EXTERN int pn_messenger_get_flags(pn_messenger_t *messenger); + #ifdef __cplusplus } #endif Modified: qpid/proton/branches/examples/proton-c/src/messenger/messenger.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/messenger/messenger.c?rev=1630828r1=1630827r2=1630828view=diff == --- qpid/proton/branches/examples/proton-c/src/messenger/messenger.c (original) +++ qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Fri Oct 10 12:54:08 2014 @@ -100,6 +100,7 @@ struct pn_messenger_t { int receivers; // # receiver links int draining; // # links in drain state int connection_error; + int flags; bool blocking; bool passive; bool interrupted; @@ -372,6 +373,10 @@ static pn_listener_ctx_t *pn_listener_ct pn_socket_t socket = pn_listen(messenger-io, host, port ? port : default_port(scheme)); if (socket == PN_INVALID_SOCKET) { pn_error_copy(messenger-error, pn_io_error(messenger-io)); +pn_error_format(messenger-error, PN_ERR, CONNECTION ERROR (%s:%s): %s\n, +messenger-address.host, messenger-address.port, +pn_error_text(messenger-error)); + return NULL; } @@ -639,6 +644,7 @@ pn_messenger_t *pn_messenger(const char m-rewritten = pn_string(NULL); m-domain = pn_string(NULL); m-connection_error = 0; +m-flags = 0; } return m; @@ -1430,11 +1436,85 @@ int pn_messenger_sync(pn_messenger_t *me } } +static void pni_parse(pn_address_t *address); +pn_connection_t *pn_messenger_resolve(pn_messenger_t *messenger, + const char *address, char **name); +int pn_messenger_work(pn_messenger_t *messenger, int timeout); + int pn_messenger_start(pn_messenger_t *messenger) { if (!messenger) return PN_ARG_ERR; - // right now this is a noop - return 0; + + int error = 0; + + // When checking of routes is required we attempt to resolve each route + // with a substitution that has a defined scheme, address and port. If + // any of theses routes is invalid an appropriate error code will be + // returned. Currently no attempt is made to check the name part of the + // address, as the intent here is to fail fast if the addressed host + // is invalid or unavailable. + if (messenger-flags | PN_FLAGS_CHECK_ROUTES) { +pn_list_t *substitutions = pn_list(PN_WEAKREF, 0); +pn_transform_get_substitutions(messenger-routes, substitutions); +for (size_t i = 0; i pn_list_size(substitutions) error == 0; i++) { + pn_string_t *substitution = (pn_string_t *)pn_list_get(substitutions, i); + if (substitution) { +pn_address_t addr; +addr.text = pn_string(NULL); +error = pn_string_copy(addr.text, substitution); +if (!error) { + pni_parse(addr); + if (addr.scheme strlen(addr.scheme) 0 + !strstr(addr.scheme, $) addr.host strlen(addr.host) 0 + !strstr(addr.host, $) addr.port strlen(addr.port) 0 + !strstr(addr.port, $)) { +pn_string_t *check_addr =
svn commit: r1630832 - in /qpid/proton/branches/examples/proton-c: include/proton/messenger.h src/messenger/messenger.c
Author: gsim Date: Fri Oct 10 12:54:31 2014 New Revision: 1630832 URL: http://svn.apache.org/r1630832 Log: PROTON-673: patch from dominic for messenger accessors for remote idle timeout Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/messenger.h?rev=1630832r1=1630831r2=1630832view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/messenger.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/messenger.h Fri Oct 10 12:54:31 2014 @@ -963,6 +963,17 @@ PN_EXTERN int pn_messenger_set_rcv_settl PN_EXTERN void pn_messenger_set_tracer(pn_messenger_t *messenger, pn_tracer_t tracer); +/** + * Gets the remote idle timeout for the specified remote service address + * + * @param[in] messenger a messenger object + * @param[in] address of remote service whose idle timeout is required + * @return the timeout in milliseconds or -1 if an error occurs + */ +PN_EXTERN pn_millis_t +pn_messenger_get_remote_idle_timeout(pn_messenger_t *messenger, + const char *address); + #ifdef __cplusplus } #endif Modified: qpid/proton/branches/examples/proton-c/src/messenger/messenger.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/messenger/messenger.c?rev=1630832r1=1630831r2=1630832view=diff == --- qpid/proton/branches/examples/proton-c/src/messenger/messenger.c (original) +++ qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Fri Oct 10 12:54:31 2014 @@ -2297,3 +2297,30 @@ void pn_messenger_set_tracer(pn_messenge messenger-tracer = tracer; } + +pn_millis_t pn_messenger_get_remote_idle_timeout(pn_messenger_t *messenger, + const char *address) +{ + if (!messenger) +return PN_ARG_ERR; + + pn_address_t addr; + addr.text = pn_string(address); + pni_parse(addr); + + pn_millis_t timeout = -1; + for (size_t i = 0; i pn_list_size(messenger-connections); i++) { +pn_connection_t *connection = +(pn_connection_t *)pn_list_get(messenger-connections, i); +pn_connection_ctx_t *ctx = +(pn_connection_ctx_t *)pn_connection_get_context(connection); +if (pn_streq(addr.scheme, ctx-scheme) pn_streq(addr.host, ctx-host) +pn_streq(addr.port, ctx-port)) { + pn_transport_t *transport = pn_connection_transport(connection); + if (transport) +timeout = pn_transport_get_remote_idle_timeout(transport); + break; +} + } + return timeout; +} - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630833 - /qpid/proton/branches/examples/proton-c/src/transport/transport.c
Author: gsim Date: Fri Oct 10 12:54:35 2014 New Revision: 1630833 URL: http://svn.apache.org/r1630833 Log: PROTON-688: reset transport state on unbind Modified: qpid/proton/branches/examples/proton-c/src/transport/transport.c Modified: qpid/proton/branches/examples/proton-c/src/transport/transport.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/transport/transport.c?rev=1630833r1=1630832r2=1630833view=diff == --- qpid/proton/branches/examples/proton-c/src/transport/transport.c (original) +++ qpid/proton/branches/examples/proton-c/src/transport/transport.c Fri Oct 10 12:54:35 2014 @@ -191,12 +191,12 @@ static void pni_map_remote_channel(pn_se session-state.remote_channel = channel; } -void pni_transport_unbind_handles(pn_hash_t *handles); +void pni_transport_unbind_handles(pn_hash_t *handles, bool reset_state); static void pni_unmap_remote_channel(pn_session_t *ssn) { // XXX: should really update link state also - pni_transport_unbind_handles(ssn-state.remote_handles); + pni_transport_unbind_handles(ssn-state.remote_handles, false); pn_transport_t *transport = ssn-connection-transport; uint16_t channel = ssn-state.remote_channel; ssn-state.remote_channel = -2; @@ -287,12 +287,14 @@ int pn_transport_bind(pn_transport_t *tr return 0; } -void pni_transport_unbind_handles(pn_hash_t *handles) +void pni_transport_unbind_handles(pn_hash_t *handles, bool reset_state) { for (pn_handle_t h = pn_hash_head(handles); h; h = pn_hash_next(handles, h)) { uintptr_t key = pn_hash_key(handles, h); -pn_link_t *link = (pn_link_t *) pn_hash_value(handles, h); -pn_link_unbound(link); +if (reset_state) { + pn_link_t *link = (pn_link_t *) pn_hash_value(handles, h); + pn_link_unbound(link); +} pn_hash_del(handles, key); } } @@ -302,8 +304,8 @@ void pni_transport_unbind_channels(pn_ha for (pn_handle_t h = pn_hash_head(channels); h; h = pn_hash_next(channels, h)) { uintptr_t key = pn_hash_key(channels, h); pn_session_t *ssn = (pn_session_t *) pn_hash_value(channels, h); -pni_transport_unbind_handles(ssn-state.local_handles); -pni_transport_unbind_handles(ssn-state.remote_handles); +pni_transport_unbind_handles(ssn-state.local_handles, true); +pni_transport_unbind_handles(ssn-state.remote_handles, true); pn_session_unbound(ssn); pn_hash_del(channels, key); } @@ -1665,7 +1667,7 @@ bool pn_pointful_buffering(pn_transport_ static void pni_unmap_local_channel(pn_session_t *ssn) { // XXX: should really update link state also - pni_transport_unbind_handles(ssn-state.local_handles); + pni_transport_unbind_handles(ssn-state.local_handles, false); pn_transport_t *transport = ssn-connection-transport; pn_session_state_t *state = ssn-state; uintptr_t channel = state-local_channel; - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630831 - in /qpid/proton/branches/examples/proton-c: include/proton/messenger.h include/proton/transport.h src/messenger/messenger.c src/transport/transport.c
Author: gsim Date: Fri Oct 10 12:54:25 2014 New Revision: 1630831 URL: http://svn.apache.org/r1630831 Log: PROTON-672: patch from dominic for setting the tracer from messenger, also includes accessor for getting the connection associated with a transport Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h qpid/proton/branches/examples/proton-c/include/proton/transport.h qpid/proton/branches/examples/proton-c/src/messenger/messenger.c qpid/proton/branches/examples/proton-c/src/transport/transport.c Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/messenger.h?rev=1630831r1=1630830r2=1630831view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/messenger.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/messenger.h Fri Oct 10 12:54:25 2014 @@ -28,6 +28,7 @@ #include proton/condition.h #include proton/terminus.h #include proton/link.h +#include proton/transport.h #ifdef __cplusplus extern C { @@ -953,6 +954,15 @@ PN_EXTERN int pn_messenger_set_snd_settl PN_EXTERN int pn_messenger_set_rcv_settle_mode(pn_messenger_t *messenger, const pn_rcv_settle_mode_t mode); +/** + * Set the tracer associated with a messenger. + * + * @param[in] messenger a messenger object + * @param[in] tracer the tracer callback + */ +PN_EXTERN void pn_messenger_set_tracer(pn_messenger_t *messenger, + pn_tracer_t tracer); + #ifdef __cplusplus } #endif Modified: qpid/proton/branches/examples/proton-c/include/proton/transport.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/transport.h?rev=1630831r1=1630830r2=1630831view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/transport.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/transport.h Fri Oct 10 12:54:25 2014 @@ -485,6 +485,14 @@ PN_EXTERN uint64_t pn_transport_get_fram */ PN_EXTERN uint64_t pn_transport_get_frames_input(const pn_transport_t *transport); +/** Access the AMQP Connection associated with the transport. + * + * @param[in] transport a transport object + * @return the connection context for the transport, or NULL if + * none + */ +PN_EXTERN pn_connection_t *pn_transport_connection(pn_transport_t *transport); + #ifdef __cplusplus } #endif Modified: qpid/proton/branches/examples/proton-c/src/messenger/messenger.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/messenger/messenger.c?rev=1630831r1=1630830r2=1630831view=diff == --- qpid/proton/branches/examples/proton-c/src/messenger/messenger.c (original) +++ qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Fri Oct 10 12:54:25 2014 @@ -103,6 +103,7 @@ struct pn_messenger_t { int flags; pn_snd_settle_mode_t snd_settle_mode; pn_rcv_settle_mode_t rcv_settle_mode; + pn_tracer_t tracer; bool blocking; bool passive; bool interrupted; @@ -649,6 +650,7 @@ pn_messenger_t *pn_messenger(const char m-flags = 0; m-snd_settle_mode = PN_SND_SETTLED; m-rcv_settle_mode = PN_RCV_FIRST; +m-tracer = NULL; } return m; @@ -906,6 +908,8 @@ static int pn_transport_config(pn_messen { pn_connection_ctx_t *ctx = (pn_connection_ctx_t *) pn_connection_get_context(connection); pn_transport_t *transport = pn_connection_transport(connection); + if (messenger-tracer) +pn_transport_set_tracer(transport, messenger-tracer); if (ctx-scheme !strcmp(ctx-scheme, amqps)) { pn_ssl_domain_t *d = pn_ssl_domain(PN_SSL_MODE_CLIENT); if (messenger-certificate messenger-private_key) { @@ -2285,3 +2289,11 @@ int pn_messenger_set_rcv_settle_mode(pn_ messenger-rcv_settle_mode = mode; return 0; } + +void pn_messenger_set_tracer(pn_messenger_t *messenger, pn_tracer_t tracer) +{ + assert(messenger); + assert(tracer); + + messenger-tracer = tracer; +} Modified: qpid/proton/branches/examples/proton-c/src/transport/transport.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/transport/transport.c?rev=1630831r1=1630830r2=1630831view=diff == --- qpid/proton/branches/examples/proton-c/src/transport/transport.c (original) +++ qpid/proton/branches/examples/proton-c/src/transport/transport.c Fri Oct 10 12:54:25 2014 @@ -2198,3 +2198,9 @@ bool pn_transport_closed(pn_transport_t ssize_t pending = pn_transport_pending(transport); return capacity 0 pending 0; } + +pn_connection_t *pn_transport_connection(pn_transport_t *transport) +{ +
svn commit: r1630834 - in /qpid/proton/branches/examples: proton-c/bindings/python/cproton.i proton-c/bindings/python/proton.py tests/python/proton_tests/__init__.py tests/python/proton_tests/url.py
Author: gsim Date: Fri Oct 10 12:54:43 2014 New Revision: 1630834 URL: http://svn.apache.org/r1630834 Log: PROTON-693: Python Url class to wrap C function pni_parse_url Also added unit tests. Added: qpid/proton/branches/examples/tests/python/proton_tests/url.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/cproton.i qpid/proton/branches/examples/proton-c/bindings/python/proton.py qpid/proton/branches/examples/tests/python/proton_tests/__init__.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/cproton.i URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/cproton.i?rev=1630834r1=1630833r2=1630834view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/cproton.i (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/cproton.i Fri Oct 10 12:54:43 2014 @@ -280,4 +280,41 @@ int pn_ssl_get_peer_hostname(pn_ssl_t *s } %} + +/** + pni_parse_url(char* url, char **scheme, char **user, char **pass, char **host, char **port, char **path) + The following type maps convert this into a python function that taks a URL string argument + and returns a list of strings [scheme, user, pass, host, port, path] + This probably could be done more neatly. +*/ + +// Typemap to copy the url string as it will be modified by parse_url +%typemap(in,noblock=1,fragment=SWIG_AsCharPtrAndSize) char *url (int res, char *t = 0, size_t n = 0, int alloc = 0) { + res = SWIG_AsCharPtrAndSize($input, t, n, alloc); + if (!SWIG_IsOK(res)) { +%argument_fail(res, char *url, $symname, $argnum); + } + $1 = %new_array(n, $*1_ltype); + memcpy($1,t,sizeof(char)*n); + if (alloc == SWIG_NEWOBJ) %delete_array(t); + $1[n-1] = 0; +} +%typemap(freearg,match=in) char *url free($1);; +%typemap(argout) char *url ; + +// Typemap for char** return strings. Don't free them. +%typemap(in,numinputs=0) char **OUTSTR($*1_ltype temp = 0) $1 = temp;; +%typemap(freearg,match=in) char **OUTSTR ; +%typemap(argout,noblock=1,fragment=SWIG_FromCharPtr) char **OUTSTR { +%append_output(SWIG_FromCharPtr(*$1)); +} + +// Typemap to initialize result as empty list +%typemap(out) void $result = PyList_New(0);; + + +%apply char** OUTSTR {char **scheme, char **user, char **pass, char **host, char **port, char **path}; +void pni_parse_url(char* url, char **scheme, char **user, char **pass, char **host, char **port, char **path); +%ignore pni_parse_url; + %include proton/cproton.i Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630834r1=1630833r2=1630834view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:54:43 2014 @@ -3654,3 +3654,117 @@ __all__ = [ timestamp, ulong ] + + +class Url(object): + +Simple URL parser/constructor, handles URLs of the form: + + scheme://user:password@host:port/path + +All components can be None if not specifeid in the URL string. + +The port can be specified as a service name, e.g. 'amqp' in the +URL string but Url.port always gives the integer value. + +@ivar scheme: Url scheme e.g. 'amqp' or 'amqps' +@ivar user: Username +@ivar password: Password +@ivar host: Host name, ipv6 literal or ipv4 dotted quad. +@ivar port: Integer port. +@ivar host_port: Returns host:port + + +AMQPS = amqps +AMQP = amqp + +class Port(int): + An integer port number that can also have an associated service name string + + def __new__(cls, value): +port = super(Url.Port, cls).__new__(cls, cls.port_int(value)) +setattr(port, 'name', str(value)) +return port + + def __eq__(self, x): return str(self) == x or int(self) == x + def __ne__(self, x): return not self == x + def __str__(self): return str(self.name) + + @staticmethod + def port_int(value): +Convert service, an integer or a service name, into an integer port number. +try: + return int(value) +except ValueError: + try: +return socket.getservbyname(value) + except socket.error: +raise ValueError(Not a valid port number or service name: '%s' % value) + +def __init__(self, url=None, **kwargs): + +@param url: String or Url instance to parse or copy. +@param kwargs: URL fields: scheme, user, password, host, port, path. +If specified, replaces corresponding component in url. + + +fields = ['scheme', 'user', 'password', 'host', 'port', 'path'] + +for f in fields: setattr(self, f,
svn commit: r1630835 - in /qpid/proton/branches/examples/proton-c: include/proton/messenger.h src/messenger/messenger.c
Author: gsim Date: Fri Oct 10 12:54:48 2014 New Revision: 1630835 URL: http://svn.apache.org/r1630835 Log: PROTON-674: patch from dominic for setting ttl on a subscription Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/messenger.h?rev=1630835r1=1630834r2=1630835view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/messenger.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/messenger.h Fri Oct 10 12:54:48 2014 @@ -472,6 +472,20 @@ PN_EXTERN bool pn_messenger_stopped(pn_m PN_EXTERN pn_subscription_t *pn_messenger_subscribe(pn_messenger_t *messenger, const char *source); /** + * Subscribes a messenger to messages from the specified source with the given + * timeout for the subscription's lifetime. + * + * @param[in] messenger the messenger to subscribe + * @param[in] source + * @param[in] timeout the maximum time to keep the subscription alive once the + *link is closed. + * @return a subscription + */ +PN_EXTERN pn_subscription_t * +pn_messenger_subscribe_ttl(pn_messenger_t *messenger, const char *source, + pn_seconds_t timeout); + +/** * Get a subscription's application context. * * See ::pn_subscription_set_context(). Modified: qpid/proton/branches/examples/proton-c/src/messenger/messenger.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/messenger/messenger.c?rev=1630835r1=1630834r2=1630835view=diff == --- qpid/proton/branches/examples/proton-c/src/messenger/messenger.c (original) +++ qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Fri Oct 10 12:54:48 2014 @@ -1656,7 +1656,8 @@ pn_connection_t *pn_messenger_resolve(pn return connection; } -pn_link_t *pn_messenger_link(pn_messenger_t *messenger, const char *address, bool sender) +pn_link_t *pn_messenger_link(pn_messenger_t *messenger, const char *address, + bool sender, pn_seconds_t timeout) { char *name = NULL; pn_connection_t *connection = pn_messenger_resolve(messenger, address, name); @@ -1705,6 +1706,14 @@ pn_link_t *pn_messenger_link(pn_messenge pn_terminus_set_address(pn_link_source(link), name); } link_ctx_setup( messenger, connection, link ); + + if (timeout 0) { +pn_terminus_set_expiry_policy(pn_link_target(link), PN_EXPIRE_WITH_LINK); +pn_terminus_set_expiry_policy(pn_link_source(link), PN_EXPIRE_WITH_LINK); +pn_terminus_set_timeout(pn_link_target(link), timeout); +pn_terminus_set_timeout(pn_link_source(link), timeout); + } + if (!sender) { pn_link_ctx_t *ctx = (pn_link_ctx_t *)pn_link_get_context(link); assert( ctx ); @@ -1715,18 +1724,27 @@ pn_link_t *pn_messenger_link(pn_messenge return link; } -pn_link_t *pn_messenger_source(pn_messenger_t *messenger, const char *source) +pn_link_t *pn_messenger_source(pn_messenger_t *messenger, const char *source, + pn_seconds_t timeout) { - return pn_messenger_link(messenger, source, false); + return pn_messenger_link(messenger, source, false, timeout); } -pn_link_t *pn_messenger_target(pn_messenger_t *messenger, const char *target) +pn_link_t *pn_messenger_target(pn_messenger_t *messenger, const char *target, + pn_seconds_t timeout) { - return pn_messenger_link(messenger, target, true); + return pn_messenger_link(messenger, target, true, timeout); } pn_subscription_t *pn_messenger_subscribe(pn_messenger_t *messenger, const char *source) { + return pn_messenger_subscribe_ttl(messenger, source, 0); +} + +pn_subscription_t *pn_messenger_subscribe_ttl(pn_messenger_t *messenger, + const char *source, + pn_seconds_t timeout) +{ pni_route(messenger, source); if (pn_error_code(messenger-error)) return NULL; @@ -1743,7 +1761,7 @@ pn_subscription_t *pn_messenger_subscrib return NULL; } } else { -pn_link_t *src = pn_messenger_source(messenger, source); +pn_link_t *src = pn_messenger_source(messenger, source, timeout); if (!src) return NULL; pn_link_ctx_t *ctx = (pn_link_ctx_t *) pn_link_get_context( src ); return ctx ? ctx-subscription : NULL; @@ -1916,7 +1934,7 @@ int pn_messenger_put(pn_messenger_t *mes } else { pni_restore(messenger, msg); pn_buffer_append(buf, encoded, size); // XXX - pn_link_t *sender = pn_messenger_target(messenger, address); + pn_link_t *sender = pn_messenger_target(messenger, address, 0); if (!sender) {
svn commit: r1630838 - in /qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms: AutoOutboundTransformer.java JMSMappingOutboundTransformer.java OutboundTransforme
Author: gsim Date: Fri Oct 10 12:55:10 2014 New Revision: 1630838 URL: http://svn.apache.org/r1630838 Log: PROTON-694: split conversion and encoding during outbound transformation to allow calling separately Applied patch from Clebert Suconic Modified: qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/OutboundTransformer.java Modified: qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java?rev=1630838r1=1630837r2=1630838view=diff == --- qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java (original) +++ qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/AutoOutboundTransformer.java Fri Oct 10 12:55:10 2014 @@ -24,8 +24,11 @@ import javax.jms.Message; */ public class AutoOutboundTransformer extends JMSMappingOutboundTransformer { +private final JMSMappingOutboundTransformer transformer; + public AutoOutboundTransformer(JMSVendor vendor) { super(vendor); +transformer = new JMSMappingOutboundTransformer(vendor); } @Override @@ -39,7 +42,7 @@ public class AutoOutboundTransformer ext return null; } } else { -return JMSMappingOutboundTransformer.transform(this, msg); +return transformer.transform(msg); } } Modified: qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java?rev=1630838r1=1630837r2=1630838view=diff == --- qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java (original) +++ qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java Fri Oct 10 12:55:10 2014 @@ -36,14 +36,10 @@ import java.util.Enumeration; import java.util.HashMap; /** -* @author a href=http://hiramchirino.com;Hiram Chirino/a -*/ + * @author a href=http://hiramchirino.com;Hiram Chirino/a + */ public class JMSMappingOutboundTransformer extends OutboundTransformer { -String prefixDeliveryAnnotations = DA_; -String prefixMessageAnnotations= MA_; -String prefixFooter = FT_; - public JMSMappingOutboundTransformer(JMSVendor vendor) { super(vendor); } @@ -59,30 +55,37 @@ public class JMSMappingOutboundTransform } catch (MessageFormatException e) { return null; } -return transform(this, msg); -} - -static EncodedMessage transform(JMSMappingOutboundTransformer options, Message msg) throws JMSException, UnsupportedEncodingException { -final JMSVendor vendor = options.vendor; - -final String messageFormatKey = options.prefixVendor + MESSAGE_FORMAT; -final String nativeKey = options.prefixVendor + NATIVE; -final String firstAcquirerKey = options.prefixVendor + FirstAcquirer; -final String prefixDeliveryAnnotationsKey = options.prefixVendor + options.prefixDeliveryAnnotations; -final String prefixMessageAnnotationsKey = options.prefixVendor + options.prefixMessageAnnotations; -final String subjectKey = options.prefixVendor +Subject; -final String contentTypeKey = options.prefixVendor +ContentType; -final String contentEncodingKey = options.prefixVendor +ContentEncoding; -final String replyToGroupIDKey = options.prefixVendor +ReplyToGroupID; -final String prefixFooterKey = options.prefixVendor + options.prefixFooter; +ProtonJMessage amqp = convert(msg); long messageFormat; try { -messageFormat = msg.getLongProperty(messageFormatKey); +messageFormat = msg.getLongProperty(this.messageFormatKey); } catch (MessageFormatException e) { return null; } +ByteBuffer buffer = ByteBuffer.wrap(new byte[1024 * 4]); +final DroppingWritableBuffer overflow = new DroppingWritableBuffer(); +int c = amqp.encode(new CompositeWritableBuffer( +new WritableBuffer.ByteBufferWrapper(buffer), overflow)); +if(
svn commit: r1630840 - in /qpid/proton/branches/examples/proton-c: include/proton/messenger.h src/messenger/messenger.c
Author: gsim Date: Fri Oct 10 12:55:21 2014 New Revision: 1630840 URL: http://svn.apache.org/r1630840 Log: PROTON-676: patch from dominic for setter for SSL peer authentication mode Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/messenger.h?rev=1630840r1=1630839r2=1630840view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/messenger.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/messenger.h Fri Oct 10 12:55:21 2014 @@ -29,6 +29,7 @@ #include proton/terminus.h #include proton/link.h #include proton/transport.h +#include proton/ssl.h #ifdef __cplusplus extern C { @@ -988,6 +989,19 @@ PN_EXTERN pn_millis_t pn_messenger_get_remote_idle_timeout(pn_messenger_t *messenger, const char *address); +/** + * Sets the SSL peer authentiacation mode required when a trust + * certificate is used. + * + * @param[in] messenger a messenger object + * @param[in] mode the mode required (see pn_ssl_verify_mode_t + * enum for valid values) + * @return 0 if successful or -1 if an error occurs + */ +PN_EXTERN int +pn_messenger_set_ssl_peer_authentication_mode(pn_messenger_t *messenger, + const pn_ssl_verify_mode_t mode); + #ifdef __cplusplus } #endif Modified: qpid/proton/branches/examples/proton-c/src/messenger/messenger.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/messenger/messenger.c?rev=1630840r1=1630839r2=1630840view=diff == --- qpid/proton/branches/examples/proton-c/src/messenger/messenger.c (original) +++ qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Fri Oct 10 12:55:21 2014 @@ -104,6 +104,7 @@ struct pn_messenger_t { pn_snd_settle_mode_t snd_settle_mode; pn_rcv_settle_mode_t rcv_settle_mode; pn_tracer_t tracer; + pn_ssl_verify_mode_t ssl_peer_authentication_mode; bool blocking; bool passive; bool interrupted; @@ -651,6 +652,7 @@ pn_messenger_t *pn_messenger(const char m-snd_settle_mode = PN_SND_SETTLED; m-rcv_settle_mode = PN_RCV_FIRST; m-tracer = NULL; +m-ssl_peer_authentication_mode = PN_SSL_VERIFY_PEER_NAME; } return m; @@ -927,7 +929,8 @@ static int pn_transport_config(pn_messen pn_error_report(CONNECTION, invalid certificate db); return err; } - err = pn_ssl_domain_set_peer_authentication(d, PN_SSL_VERIFY_PEER_NAME, NULL); + err = pn_ssl_domain_set_peer_authentication( + d, messenger-ssl_peer_authentication_mode, NULL); if (err) { pn_error_report(CONNECTION, error configuring ssl to verify peer); } @@ -2342,3 +2345,13 @@ pn_millis_t pn_messenger_get_remote_idle } return timeout; } + +int +pn_messenger_set_ssl_peer_authentication_mode(pn_messenger_t *messenger, + const pn_ssl_verify_mode_t mode) +{ + if (!messenger) +return PN_ARG_ERR; + messenger-ssl_peer_authentication_mode = mode; + return 0; +} - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630837 - /qpid/proton/branches/examples/proton-c/src/url.c
Author: gsim Date: Fri Oct 10 12:55:03 2014 New Revision: 1630837 URL: http://svn.apache.org/r1630837 Log: PROTON-693: Fix for windows build Modified: qpid/proton/branches/examples/proton-c/src/url.c Modified: qpid/proton/branches/examples/proton-c/src/url.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/url.c?rev=1630837r1=1630836r2=1630837view=diff == --- qpid/proton/branches/examples/proton-c/src/url.c (original) +++ qpid/proton/branches/examples/proton-c/src/url.c Fri Oct 10 12:55:03 2014 @@ -19,8 +19,10 @@ * */ -#include proton/url.h -#include proton/util.h +#include proton/url.h +#include proton/util.h +#include platform.h + #include stdlib.h #include string.h #include stdio.h - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630841 - in /qpid/proton/branches/examples/proton-j/src: main/java/org/apache/qpid/proton/codec/EncoderImpl.java main/java/org/apache/qpid/proton/codec/StringType.java test/java/org/apac
Author: gsim Date: Fri Oct 10 12:55:29 2014 New Revision: 1630841 URL: http://svn.apache.org/r1630841 Log: PROTON-576: update String UTF-8 encoding to handle high range unicode characters / surrogate pairs Applied patch from Dominic Evans with modifications by Rob Godfrey Added: qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/codec/EncoderImpl.java qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/codec/StringType.java Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/codec/EncoderImpl.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/codec/EncoderImpl.java?rev=1630841r1=1630840r2=1630841view=diff == --- qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/codec/EncoderImpl.java (original) +++ qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/codec/EncoderImpl.java Fri Oct 10 12:55:29 2014 @@ -21,7 +21,11 @@ package org.apache.qpid.proton.codec; import java.nio.ByteBuffer; -import java.util.*; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; import org.apache.qpid.proton.amqp.Binary; import org.apache.qpid.proton.amqp.Decimal128; @@ -770,31 +774,60 @@ public final class EncoderImpl implement void writeRaw(String string) { final int length = string.length(); -char c; +int c; for (int i = 0; i length; i++) { c = string.charAt(i); -if ((c = 0x0001) (c = 0x007F)) +if ((c 0xFF80) == 0) /* U+..U+007F */ { _buffer.put((byte) c); - } -else if (c 0x07FF) +else if ((c 0xF800) == 0) /* U+0080..U+07FF */ { -_buffer.put((byte) (0xE0 | ((c 12) 0x0F))); -_buffer.put((byte) (0x80 | ((c 6) 0x3F))); -_buffer.put((byte) (0x80 | (c 0x3F))); +_buffer.put((byte)(0xC0 | ((c 6) 0x1F))); +_buffer.put((byte)(0x80 | (c 0x3F))); } -else +else if ((c 0xD800) != 0xD800) /* U+0800..U+ - excluding surrogate pairs */ { -_buffer.put((byte) (0xC0 | ((c 6) 0x1F))); -_buffer.put((byte) (0x80 | (c 0x3F))); +_buffer.put((byte)(0xE0 | ((c 12) 0x0F))); +_buffer.put((byte)(0x80 | ((c 6) 0x3F))); +_buffer.put((byte)(0x80 | (c 0x3F))); } -} +else +{ +int low; -} +if(((c 0xDC00) == 0xDC00) || (++i == length) || ((low = string.charAt(i)) 0xDC00) != 0xDC00) +{ +throw new IllegalArgumentException(String contains invalid Unicode code points); +} +c = 0x01 + ((c 0x03FF) 10) + (low 0x03FF); +if (c = 0x3) /* U+1..U+3 */ +{ +_buffer.put((byte) 0xF0); +_buffer.put((byte)(0x90 | ((c 12) 0x2F))); +_buffer.put((byte)(0x80 | ((c 6) 0x3F))); +_buffer.put((byte)(0x80 | (c 0x3F))); +} +else if (c = 0xF) /* U+4..U+F */ +{ +_buffer.put((byte)(0xF0 | ((c 18) 0x03))); +_buffer.put((byte)(0x80 | ((c 12) 0x3F))); +_buffer.put((byte)(0x80 | ((c 6) 0x3F))); +_buffer.put((byte)(0x80 | (c 0x3F))); +} +else /* U+10..U+10 */ +{ +_buffer.put((byte)(0xF4)); +_buffer.put((byte)(0x80 | ((c 12) 0x3F))); +_buffer.put((byte)(0x80 | ((c 6) 0x3F))); +_buffer.put((byte)(0x80 | (c 0x3F))); +} +} +} +} } Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/codec/StringType.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/codec/StringType.java?rev=1630841r1=1630840r2=1630841view=diff == --- qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/codec/StringType.java (original) +++ qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/codec/StringType.java Fri Oct 10 12:55:29 2014 @@ -83,29 +83,22 @@ public class
svn commit: r1630836 - in /qpid/proton/branches/examples: proton-c/ proton-c/bindings/perl/ proton-c/bindings/php/ proton-c/bindings/python/ proton-c/bindings/ruby/ proton-c/include/proton/ proton-c/s
Author: gsim Date: Fri Oct 10 12:54:58 2014 New Revision: 1630836 URL: http://svn.apache.org/r1630836 Log: PROTON-693: Python Url class to wrap C function pni_parse_url It was pointed out that pni_parse_url is an internal function and the interface is not suitable for public API. Rewrote the URL parser as a proper swigable C API pn_url_*. This gets rid of the need for previous swig insanity and is cleaner all round. Internally still uses the pni_parse_url parser, we can clean that up later. Added: qpid/proton/branches/examples/proton-c/include/proton/url.h qpid/proton/branches/examples/proton-c/src/url.c Modified: qpid/proton/branches/examples/proton-c/CMakeLists.txt qpid/proton/branches/examples/proton-c/bindings/perl/perl.i qpid/proton/branches/examples/proton-c/bindings/php/php.i qpid/proton/branches/examples/proton-c/bindings/python/cproton.i qpid/proton/branches/examples/proton-c/bindings/python/proton.py qpid/proton/branches/examples/proton-c/bindings/ruby/ruby.i qpid/proton/branches/examples/proton-c/include/proton/cproton.i qpid/proton/branches/examples/tests/python/proton_tests/url.py Modified: qpid/proton/branches/examples/proton-c/CMakeLists.txt URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/CMakeLists.txt?rev=1630836r1=1630835r2=1630836view=diff == --- qpid/proton/branches/examples/proton-c/CMakeLists.txt (original) +++ qpid/proton/branches/examples/proton-c/CMakeLists.txt Fri Oct 10 12:54:58 2014 @@ -270,6 +270,7 @@ set (qpid-proton-core src/object/iterator.c src/util.c + src/url.c src/error.c src/buffer.c src/parser.c Modified: qpid/proton/branches/examples/proton-c/bindings/perl/perl.i URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/perl/perl.i?rev=1630836r1=1630835r2=1630836view=diff == --- qpid/proton/branches/examples/proton-c/bindings/perl/perl.i (original) +++ qpid/proton/branches/examples/proton-c/bindings/perl/perl.i Fri Oct 10 12:54:58 2014 @@ -8,6 +8,7 @@ #include proton/messenger.h #include proton/ssl.h #include proton/driver_extras.h +#include proton/url.h %} %include cstring.i Modified: qpid/proton/branches/examples/proton-c/bindings/php/php.i URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/php/php.i?rev=1630836r1=1630835r2=1630836view=diff == --- qpid/proton/branches/examples/proton-c/bindings/php/php.i (original) +++ qpid/proton/branches/examples/proton-c/bindings/php/php.i Fri Oct 10 12:54:58 2014 @@ -29,6 +29,7 @@ %header %{ /* Include the headers needed by the code in this wrapper file */ #include proton/types.h +#include proton/url.h #include proton/message.h #include proton/driver.h #include proton/driver_extras.h Modified: qpid/proton/branches/examples/proton-c/bindings/python/cproton.i URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/cproton.i?rev=1630836r1=1630835r2=1630836view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/cproton.i (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/cproton.i Fri Oct 10 12:54:58 2014 @@ -23,6 +23,7 @@ #include winsock2.h #endif #include proton/engine.h +#include proton/url.h #include proton/message.h #include proton/sasl.h #include proton/driver.h @@ -280,41 +281,4 @@ int pn_ssl_get_peer_hostname(pn_ssl_t *s } %} - -/** - pni_parse_url(char* url, char **scheme, char **user, char **pass, char **host, char **port, char **path) - The following type maps convert this into a python function that taks a URL string argument - and returns a list of strings [scheme, user, pass, host, port, path] - This probably could be done more neatly. -*/ - -// Typemap to copy the url string as it will be modified by parse_url -%typemap(in,noblock=1,fragment=SWIG_AsCharPtrAndSize) char *url (int res, char *t = 0, size_t n = 0, int alloc = 0) { - res = SWIG_AsCharPtrAndSize($input, t, n, alloc); - if (!SWIG_IsOK(res)) { -%argument_fail(res, char *url, $symname, $argnum); - } - $1 = %new_array(n, $*1_ltype); - memcpy($1,t,sizeof(char)*n); - if (alloc == SWIG_NEWOBJ) %delete_array(t); - $1[n-1] = 0; -} -%typemap(freearg,match=in) char *url free($1);; -%typemap(argout) char *url ; - -// Typemap for char** return strings. Don't free them. -%typemap(in,numinputs=0) char **OUTSTR($*1_ltype temp = 0) $1 = temp;; -%typemap(freearg,match=in) char **OUTSTR ; -%typemap(argout,noblock=1,fragment=SWIG_FromCharPtr) char **OUTSTR { -%append_output(SWIG_FromCharPtr(*$1)); -} - -// Typemap to initialize result as empty list -%typemap(out) void $result = PyList_New(0);; - - -%apply
svn commit: r1630839 - /qpid/proton/branches/examples/proton-c/src/windows/io.c
Author: gsim Date: Fri Oct 10 12:55:15 2014 New Revision: 1630839 URL: http://svn.apache.org/r1630839 Log: PROTON-684: Restrict IOCP enlistment to pn_selector_t usage scenarios in Windows Modified: qpid/proton/branches/examples/proton-c/src/windows/io.c Modified: qpid/proton/branches/examples/proton-c/src/windows/io.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/windows/io.c?rev=1630839r1=1630838r2=1630839view=diff == --- qpid/proton/branches/examples/proton-c/src/windows/io.c (original) +++ qpid/proton/branches/examples/proton-c/src/windows/io.c Fri Oct 10 12:55:15 2014 @@ -210,14 +210,16 @@ pn_socket_t pn_listen(pn_io_t *io, const return INVALID_SOCKET; } - iocpdesc_t *iocpd = pni_iocpdesc_create(io-iocp, sock, false); - if (!iocpd) { -pn_i_error_from_errno(io-error, register); -closesocket(sock); -return INVALID_SOCKET; + if (io-iocp-selector) { +iocpdesc_t *iocpd = pni_iocpdesc_create(io-iocp, sock, false); +if (!iocpd) { + pn_i_error_from_errno(io-error, register); + closesocket(sock); + return INVALID_SOCKET; +} +pni_iocpdesc_start(iocpd); } - pni_iocpdesc_start(iocpd); return sock; } @@ -242,7 +244,22 @@ pn_socket_t pn_connect(pn_io_t *io, cons ensure_unique(io, sock); pn_configure_sock(io, sock); - return pni_iocp_begin_connect(io-iocp, sock, addr, io-error); + + if (io-iocp-selector) { +return pni_iocp_begin_connect(io-iocp, sock, addr, io-error); + } else { +if (connect(sock, addr-ai_addr, addr-ai_addrlen) != 0) { + if (WSAGetLastError() != WSAEWOULDBLOCK) { + pni_win32_error(io-error, connect, WSAGetLastError()); + freeaddrinfo(addr); + closesocket(sock); + return INVALID_SOCKET; + } +} + +freeaddrinfo(addr); +return sock; + } } pn_socket_t pn_accept(pn_io_t *io, pn_socket_t listen_sock, char *name, size_t size) - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630842 - in /qpid/proton/branches/examples: proton-c/bindings/python/ proton-c/include/proton/ proton-c/src/ proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/ proton-j/src/ma
Author: gsim Date: Fri Oct 10 12:55:41 2014 New Revision: 1630842 URL: http://svn.apache.org/r1630842 Log: PROTON-693: Implement C-API wrappers in Java for jython, clean up Url implementation. - Java implementation of fake C API for Jython SWIG wrappers based on messenger.impl.Address. - Minor extensions to Address.java - Minor change to Address.java to be consistent with C parser on one corner case: - is url(/foo) a host called /foo or an empty host and a path foo - fixed Java parser to agree with C - path foo - Rename getters from url_* to url_get_*. - Use pn_string_t formatting functions to build URL string. Added: qpid/proton/branches/examples/proton-j/src/main/resources/curl.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py qpid/proton/branches/examples/proton-c/include/proton/url.h qpid/proton/branches/examples/proton-c/src/url.c qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Address.java qpid/proton/branches/examples/proton-j/src/main/resources/cproton.py qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/messenger/impl/AddressTest.java Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630842r1=1630841r2=1630842view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:55:41 2014 @@ -31,6 +31,7 @@ The proton APIs consist of the following from cproton import * + import weakref, re, socket try: import uuid @@ -3718,7 +3719,7 @@ class Url(object): class PartDescriptor(object): def __init__(self, part): - self.getter = globals()[pn_url_%s % part] + self.getter = globals()[pn_url_get_%s % part] self.setter = globals()[pn_url_set_%s % part] def __get__(self, obj, type=None): return self.getter(obj._url) def __set__(self, obj, value): return self.setter(obj._url, str(value)) @@ -3729,20 +3730,24 @@ class Url(object): host = PartDescriptor('host') path = PartDescriptor('path') - @property - def port(self): -portstr = pn_url_port(self._url) + def _get_port(self): +portstr = pn_url_get_port(self._url) return portstr and Url.Port(portstr) - @port.setter - def port(self, value): + def _set_port(self, value): if value is None: pn_url_set_port(self._url, None) else: pn_url_set_port(self._url, str(Url.Port(value))) + port = property(_get_port, _set_port) + def __str__(self): return pn_url_str(self._url) def __repr__(self): return Url(%r) % str(self) + def __del__(self): +pn_url_free(self._url); +self._url = None + def defaults(self): Fill in missing values (scheme, host or port) with defaults Modified: qpid/proton/branches/examples/proton-c/include/proton/url.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/url.h?rev=1630842r1=1630841r2=1630842view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/url.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/url.h Fri Oct 10 12:55:41 2014 @@ -46,7 +46,12 @@ PN_EXTERN void pn_url_free(pn_url_t *url /** Clear the contents of the URL. */ PN_EXTERN void pn_url_clear(pn_url_t *url); -/** Return the string form of a URL. Owned by the pn_url_t.*/ +/** + * Return the string form of a URL. + * + * The returned string is owned by the pn_url_t and will become invalid if it + * is modified. + */ PN_EXTERN const char *pn_url_str(pn_url_t *url); /** @@ -56,12 +61,12 @@ PN_EXTERN const char *pn_url_str(pn_url_ * *@{ */ -PN_EXTERN const char *pn_url_scheme(pn_url_t *url); -PN_EXTERN const char *pn_url_username(pn_url_t *url); -PN_EXTERN const char *pn_url_password(pn_url_t *url); -PN_EXTERN const char *pn_url_host(pn_url_t *url); -PN_EXTERN const char *pn_url_port(pn_url_t *url); -PN_EXTERN const char *pn_url_path(pn_url_t *url); +PN_EXTERN const char *pn_url_get_scheme(pn_url_t *url); +PN_EXTERN const char *pn_url_get_username(pn_url_t *url); +PN_EXTERN const char *pn_url_get_password(pn_url_t *url); +PN_EXTERN const char *pn_url_get_host(pn_url_t *url); +PN_EXTERN const char *pn_url_get_port(pn_url_t *url); +PN_EXTERN const char *pn_url_get_path(pn_url_t *url); ///@} /** Modified: qpid/proton/branches/examples/proton-c/src/url.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/url.c?rev=1630842r1=1630841r2=1630842view=diff == --- qpid/proton/branches/examples/proton-c/src/url.c (original) +++
svn commit: r1630844 - /qpid/proton/branches/examples/proton-c/bindings/python/proton.py
Author: gsim Date: Fri Oct 10 12:55:46 2014 New Revision: 1630844 URL: http://svn.apache.org/r1630844 Log: PROTON-687: clear reference to C object when delivery is released. Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630844r1=1630843r2=1630844view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:55:46 2014 @@ -2898,12 +2898,14 @@ class Delivery(object): self.link._deliveries.add(self) def __del__(self): -pn_delivery_set_context(self._dlv, pn_py2void(None)) +self._release() def _release(self): Release the underlying C Engine resource. if self._dlv: + pn_delivery_set_context(self._dlv, pn_py2void(None)) pn_delivery_settle(self._dlv) + self._dlv = None @property def tag(self): - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630847 - in /qpid/proton/branches/examples/proton-c: include/proton/messenger.h src/messenger/messenger.c
Author: gsim Date: Fri Oct 10 12:56:10 2014 New Revision: 1630847 URL: http://svn.apache.org/r1630847 Log: PROTON-680: link and delivery accessors (patch from dominic) Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Modified: qpid/proton/branches/examples/proton-c/include/proton/messenger.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/messenger.h?rev=1630847r1=1630846r2=1630847view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/messenger.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/messenger.h Fri Oct 10 12:56:10 2014 @@ -487,6 +487,18 @@ pn_messenger_subscribe_ttl(pn_messenger_ pn_seconds_t timeout); /** + * Get a link based on link name and whether the link is a sender or receiver + * + * @param[in] messenger the messenger to get the link from + * @param[in] address the link address that identifies the link to receive + * @param[in] sender true if the link is a sender, false if the link is a + *receiver + * @return a link, or NULL if no link matches the address / sender parameters + */ +PN_EXTERN pn_link_t *pn_messenger_get_link(pn_messenger_t *messenger, + const char *address, bool sender); + +/** * Get a subscription's application context. * * See ::pn_subscription_set_context(). @@ -538,6 +550,20 @@ PN_EXTERN int pn_messenger_put(pn_messen PN_EXTERN pn_status_t pn_messenger_status(pn_messenger_t *messenger, pn_tracker_t tracker); /** + * Get delivery information about a delivery. + * + * Returns the delivery information associated with the supplied tracker. + * This may return NULL if the tracker has fallen outside the + * incoming/outgoing tracking windows of the messenger. + * + * @param[in] messenger the messenger + * @param[in] tracker the tracker identifying the delivery + * @return a pn_delivery_t representing the delivery. + */ +PN_EXTERN pn_delivery_t *pn_messenger_delivery(pn_messenger_t *messenger, + pn_tracker_t tracker); + +/** * Check if the delivery associated with a given tracker is still * waiting to be sent. * Modified: qpid/proton/branches/examples/proton-c/src/messenger/messenger.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/messenger/messenger.c?rev=1630847r1=1630846r2=1630847view=diff == --- qpid/proton/branches/examples/proton-c/src/messenger/messenger.c (original) +++ qpid/proton/branches/examples/proton-c/src/messenger/messenger.c Fri Oct 10 12:56:10 2014 @@ -1669,13 +1669,12 @@ pn_connection_t *pn_messenger_resolve(pn return connection; } -pn_link_t *pn_messenger_link(pn_messenger_t *messenger, const char *address, - bool sender, pn_seconds_t timeout) +PN_EXTERN pn_link_t *pn_messenger_get_link(pn_messenger_t *messenger, + const char *address, bool sender) { char *name = NULL; pn_connection_t *connection = pn_messenger_resolve(messenger, address, name); if (!connection) return NULL; - pn_connection_ctx_t *cctx = (pn_connection_ctx_t *) pn_connection_get_context(connection); pn_link_t *link = pn_link_head(connection, PN_LOCAL_ACTIVE); while (link) { @@ -1688,6 +1687,22 @@ pn_link_t *pn_messenger_link(pn_messenge } link = pn_link_next(link, PN_LOCAL_ACTIVE); } + return NULL; +} + +pn_link_t *pn_messenger_link(pn_messenger_t *messenger, const char *address, + bool sender, pn_seconds_t timeout) +{ + char *name = NULL; + pn_connection_t *connection = pn_messenger_resolve(messenger, address, name); + if (!connection) +return NULL; + pn_connection_ctx_t *cctx = + (pn_connection_ctx_t *)pn_connection_get_context(connection); + + pn_link_t *link = pn_messenger_get_link(messenger, address, sender); + if (link) +return link; pn_session_t *ssn = pn_session(connection); pn_session_open(ssn); @@ -1992,6 +2007,18 @@ pn_status_t pn_messenger_status(pn_messe } } +pn_delivery_t *pn_messenger_delivery(pn_messenger_t *messenger, + pn_tracker_t tracker) +{ + pni_store_t *store = pn_tracker_store(messenger, tracker); + pni_entry_t *e = pni_store_entry(store, pn_tracker_sequence(tracker)); + if (e) { +return pni_entry_get_delivery(e); + } else { +return NULL; + } +} + bool pn_messenger_buffered(pn_messenger_t *messenger, pn_tracker_t tracker) { pni_store_t *store = pn_tracker_store(messenger, tracker); - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional
svn commit: r1630848 - in /qpid/proton/branches/examples/proton-c: include/proton/cid.h src/url.c
Author: gsim Date: Fri Oct 10 12:56:16 2014 New Revision: 1630848 URL: http://svn.apache.org/r1630848 Log: PROTON-693: Make pn_url_t a proper pn_class object, hashable comparable. Modified: qpid/proton/branches/examples/proton-c/include/proton/cid.h qpid/proton/branches/examples/proton-c/src/url.c Modified: qpid/proton/branches/examples/proton-c/include/proton/cid.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/cid.h?rev=1630848r1=1630847r2=1630848view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/cid.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/cid.h Fri Oct 10 12:56:16 2014 @@ -48,7 +48,9 @@ typedef enum { CID_pn_io, CID_pn_selector, - CID_pn_selectable + CID_pn_selectable, + + CID_pn_url } pn_cid_t; #endif /* cid.h */ Modified: qpid/proton/branches/examples/proton-c/src/url.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/url.c?rev=1630848r1=1630847r2=1630848view=diff == --- qpid/proton/branches/examples/proton-c/src/url.c (original) +++ qpid/proton/branches/examples/proton-c/src/url.c Fri Oct 10 12:56:16 2014 @@ -45,10 +45,52 @@ struct pn_url_t { pn_string_t *str; }; +/** Internal use only, returns the pn_string_t. Public function is pn_url_str() */ +static pn_string_t *pn_url_string(pn_url_t* url) +{ +pn_url_str(url); /* Make sure str is up to date */ +return url-str; +} + +static void pn_url_finalize(void *object) +{ +pn_url_t *url = (pn_url_t *) object; +pn_url_clear(url); +pn_free(url-str); +} + +static uintptr_t pn_url_hashcode(void *object) +{ +pn_url_t *url = (pn_url_t *) object; +return pn_hashcode(pn_url_string(url)); +} + +static intptr_t pn_url_compare(void *oa, void *ob) +{ +pn_url_t *a = (pn_url_t *) oa; +pn_url_t *b = (pn_url_t *) ob; +return pn_compare(pn_url_string(a), pn_url_string(b)); +} + + +static int pn_url_inspect(void *obj, pn_string_t *dst) +{ +pn_url_t *url = (pn_url_t *) obj; +int err = 0; +err = pn_string_addf(dst, Url(); if (err) return err; +err = pn_inspect(pn_url_string(url), dst); if (err) return err; +return pn_string_addf(dst, )); +} + +#define pn_url_initialize NULL + + PN_EXTERN pn_url_t *pn_url() { -pn_url_t *url = (pn_url_t*)malloc(sizeof(pn_url_t)); -if (url) memset(url, 0, sizeof(*url)); -url-str = pn_string(); +static const pn_class_t clazz = PN_CLASS(pn_url); +pn_url_t *url = (pn_url_t*) pn_class_new(clazz, sizeof(pn_url_t)); +if (!url) return NULL; +memset(url, 0, sizeof(*url)); +url-str = pn_string(NULL); return url; } @@ -75,11 +117,7 @@ PN_EXTERN pn_url_t *pn_url_parse(const c } /** Free a URL */ -PN_EXTERN void pn_url_free(pn_url_t *url) { -pn_url_clear(url); -pn_free(url-str); -free(url); -} +PN_EXTERN void pn_url_free(pn_url_t *url) { pn_free(url); } /** Clear the contents of the URL. */ PN_EXTERN void pn_url_clear(pn_url_t *url) { @@ -96,17 +134,19 @@ static inline int len(const char *str) { /** Return the string form of a URL. */ PN_EXTERN const char *pn_url_str(pn_url_t *url) { -pn_string_set(url-str, ); -if (url-scheme) pn_string_addf(url-str, %s://, url-scheme); -if (url-username) pn_string_addf(url-str, %s, url-username); -if (url-password) pn_string_addf(url-str, :%s, url-password); -if (url-username || url-password) pn_string_addf(url-str, @); -if (url-host) { -if (strchr(url-host, ':')) pn_string_addf(url-str, [%s], url-host); -else pn_string_addf(url-str, %s, url-host); +if (pn_string_get(url-str) == NULL) { +pn_string_set(url-str, ); +if (url-scheme) pn_string_addf(url-str, %s://, url-scheme); +if (url-username) pn_string_addf(url-str, %s, url-username); +if (url-password) pn_string_addf(url-str, :%s, url-password); +if (url-username || url-password) pn_string_addf(url-str, @); +if (url-host) { +if (strchr(url-host, ':')) pn_string_addf(url-str, [%s], url-host); +else pn_string_addf(url-str, %s, url-host); +} +if (url-port) pn_string_addf(url-str, :%s, url-port); +if (url-path) pn_string_addf(url-str, /%s, url-path); } -if (url-port) pn_string_addf(url-str, :%s, url-port); -if (url-path) pn_string_addf(url-str, /%s, url-path); return pn_string_get(url-str); } @@ -117,7 +157,7 @@ PN_EXTERN const char *pn_url_get_host(pn PN_EXTERN const char *pn_url_get_port(pn_url_t *url) { return url-port; } PN_EXTERN const char *pn_url_get_path(pn_url_t *url) { return url-path; } -#define SET(part) free(url-part); url-part = copy(part) +#define SET(part) free(url-part); url-part = copy(part); pn_string_clear(url-str) PN_EXTERN void
svn commit: r1630845 - in /qpid/proton/branches/examples: proton-c/bindings/python/ proton-c/include/proton/ proton-c/src/engine/ proton-c/src/events/ proton-c/src/messenger/ proton-c/src/transport/ p
Author: gsim Date: Fri Oct 10 12:55:59 2014 New Revision: 1630845 URL: http://svn.apache.org/r1630845 Log: PROTON-677: added support for detach Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py qpid/proton/branches/examples/proton-c/include/proton/event.h qpid/proton/branches/examples/proton-c/include/proton/link.h qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h qpid/proton/branches/examples/proton-c/src/engine/engine.c qpid/proton/branches/examples/proton-c/src/events/event.c qpid/proton/branches/examples/proton-c/src/messenger/messenger.c qpid/proton/branches/examples/proton-c/src/transport/transport.c qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/Link.java qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/LinkImpl.java qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java qpid/proton/branches/examples/proton-j/src/main/resources/cengine.py qpid/proton/branches/examples/tests/python/proton_tests/engine.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630845r1=1630844r2=1630845view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:55:59 2014 @@ -2648,6 +2648,9 @@ class Link(Endpoint): def drained(self): return pn_link_drained(self._link) + def detach(self): +return pn_link_detach(self._link) + class Terminus(object): UNSPECIFIED = PN_UNSPECIFIED @@ -3385,8 +3388,10 @@ class Event: LINK_INIT = PN_LINK_INIT LINK_OPEN = PN_LINK_OPEN LINK_CLOSE = PN_LINK_CLOSE + LINK_DETACH = PN_LINK_DETACH LINK_REMOTE_OPEN = PN_LINK_REMOTE_OPEN LINK_REMOTE_CLOSE = PN_LINK_REMOTE_CLOSE + LINK_REMOTE_DETACH = PN_LINK_REMOTE_DETACH LINK_FLOW = PN_LINK_FLOW LINK_FINAL = PN_LINK_FINAL Modified: qpid/proton/branches/examples/proton-c/include/proton/event.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/event.h?rev=1630845r1=1630844r2=1630845view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/event.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/event.h Fri Oct 10 12:55:59 2014 @@ -202,6 +202,18 @@ typedef enum { PN_LINK_REMOTE_CLOSE, /** + * The local link endpoint has been detached. Events of this type + * point to the relevant link. + */ + PN_LINK_DETACH, + + /** + * The remote endpoint has detached the link. Events of this type + * point to the relevant link. + */ + PN_LINK_REMOTE_DETACH, + + /** * The flow control state for a link has changed. Events of this * type point to the relevant link. */ Modified: qpid/proton/branches/examples/proton-c/include/proton/link.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/link.h?rev=1630845r1=1630844r2=1630845view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/link.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/link.h Fri Oct 10 12:55:59 2014 @@ -249,6 +249,13 @@ PN_EXTERN void pn_link_open(pn_link_t *l PN_EXTERN void pn_link_close(pn_link_t *link); /** + * Detach a link. + * + * @param[in] link a link object + */ +PN_EXTERN void pn_link_detach(pn_link_t *link); + +/** * Access the locally defined source definition for a link. * * The pointer returned by this operation is valid until the link Modified: qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h?rev=1630845r1=1630844r2=1630845view=diff == --- qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h (original) +++ qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h Fri Oct 10 12:55:59 2014 @@ -252,6 +252,7 @@ struct pn_link_t { uint8_t remote_rcv_settle_mode; bool drain_flag_mode; // receiver only bool drain; + bool detached; }; struct pn_disposition_t { Modified: qpid/proton/branches/examples/proton-c/src/engine/engine.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/engine/engine.c?rev=1630845r1=1630844r2=1630845view=diff == ---
svn commit: r1630851 - /qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java
Author: gsim Date: Fri Oct 10 12:56:43 2014 New Revision: 1630851 URL: http://svn.apache.org/r1630851 Log: PROTON-576: update test to make it compile on Java 6 Modified: qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java Modified: qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java?rev=1630851r1=1630850r2=1630851view=diff == --- qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java (original) +++ qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java Fri Oct 10 12:56:43 2014 @@ -24,7 +24,7 @@ import static org.junit.Assert.assertEqu import java.lang.Character.UnicodeBlock; import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; +import java.nio.charset.Charset; import java.util.HashSet; import java.util.Set; @@ -37,6 +37,8 @@ import org.apache.qpid.proton.amqp.messa */ public class StringTypeTest { +private static final Charset CHARSET_UTF8 = Charset.forName(UTF-8); + /** * Loop over all the chars in a given {@link UnicodeBlock} and return a * {@link Set String} containing all the possible values as their @@ -62,8 +64,12 @@ public class StringTypeTest } else if (charCount == 2) { -sb.append(Character.highSurrogate(codePoint)); -sb.append(Character.lowSurrogate(codePoint)); +//TODO: use Character.highSurrogate(codePoint) and Character.lowSurrogate(codePoint) when Java 7 is baseline +char highSurrogate = (char) ((codePoint 10) + ('\uD800' - (0x01 10))); +char lowSurrogate = (char) ((codePoint 0x3ff) + '\uDC00'); + +sb.append(highSurrogate); +sb.append(lowSurrogate); } else { @@ -86,7 +92,7 @@ public class StringTypeTest { for (final String input : generateTestData()) { -assertEquals(Incorrect string length calculated for string '+input+',input.getBytes(StandardCharsets.UTF_8).length, StringType.calculateUTF8Length(input)); +assertEquals(Incorrect string length calculated for string '+input+',input.getBytes(CHARSET_UTF8).length, StringType.calculateUTF8Length(input)); } } @@ -128,10 +134,12 @@ public class StringTypeTest addAll(getAllStringsFromUnicodeBlock(UnicodeBlock.GREEK)); addAll(getAllStringsFromUnicodeBlock(UnicodeBlock.LETTERLIKE_SYMBOLS)); // blocks with surrogate pairs - addAll(getAllStringsFromUnicodeBlock(UnicodeBlock.MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS)); +//TODO: restore when Java 7 is baseline + //addAll(getAllStringsFromUnicodeBlock(UnicodeBlock.MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS)); addAll(getAllStringsFromUnicodeBlock(UnicodeBlock.MUSICAL_SYMBOLS)); - addAll(getAllStringsFromUnicodeBlock(UnicodeBlock.EMOTICONS)); - addAll(getAllStringsFromUnicodeBlock(UnicodeBlock.PLAYING_CARDS)); +//TODO: restore when Java 7 is baseline + //addAll(getAllStringsFromUnicodeBlock(UnicodeBlock.EMOTICONS)); + //addAll(getAllStringsFromUnicodeBlock(UnicodeBlock.PLAYING_CARDS)); addAll(getAllStringsFromUnicodeBlock(UnicodeBlock.SUPPLEMENTARY_PRIVATE_USE_AREA_A)); addAll(getAllStringsFromUnicodeBlock(UnicodeBlock.SUPPLEMENTARY_PRIVATE_USE_AREA_B)); } - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630850 - /qpid/proton/branches/examples/proton-c/include/proton/url.h
Author: gsim Date: Fri Oct 10 12:56:37 2014 New Revision: 1630850 URL: http://svn.apache.org/r1630850 Log: PROTON-693: Export pn_url... symbols as C not C++ Modified: qpid/proton/branches/examples/proton-c/include/proton/url.h Modified: qpid/proton/branches/examples/proton-c/include/proton/url.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/url.h?rev=1630850r1=1630849r2=1630850view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/url.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/url.h Fri Oct 10 12:56:37 2014 @@ -21,6 +21,11 @@ #include proton/import_export.h +#ifdef __cplusplus +extern C { +#endif + + /** @file * URL API for parsing URLs. * @@ -85,4 +90,9 @@ PN_EXTERN void pn_url_set_path(pn_url_t ///@} ///@} + +#ifdef __cplusplus +} +#endif + #endif - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630854 - in /qpid/proton/branches/examples: proton-c/bindings/python/ proton-c/include/proton/ proton-c/src/engine/ proton-c/src/transport/ proton-j/src/main/java/org/apache/qpid/proton/
Author: gsim Date: Fri Oct 10 12:57:08 2014 New Revision: 1630854 URL: http://svn.apache.org/r1630854 Log: PROTON-689: added a condition to the transport along with bindings to expose it Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py qpid/proton/branches/examples/proton-c/include/proton/transport.h qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h qpid/proton/branches/examples/proton-c/src/transport/transport.c qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java qpid/proton/branches/examples/proton-j/src/main/resources/cengine.py qpid/proton/branches/examples/tests/python/proton_tests/engine.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630854r1=1630853r2=1630854view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:57:08 2014 @@ -3136,6 +3136,10 @@ The idle timeout of the connection (floa self._ssl = SSL(self, domain, session_details) return self._ssl + @property + def condition(self): +return cond2obj(pn_transport_condition(self._trans)) + class SASLException(TransportException): pass Modified: qpid/proton/branches/examples/proton-c/include/proton/transport.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/transport.h?rev=1630854r1=1630853r2=1630854view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/transport.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/transport.h Fri Oct 10 12:57:08 2014 @@ -24,6 +24,7 @@ #include proton/import_export.h #include proton/type_compat.h +#include proton/condition.h #include stddef.h #include sys/types.h @@ -103,20 +104,18 @@ PN_EXTERN pn_transport_t *pn_transport(v PN_EXTERN void pn_transport_free(pn_transport_t *transport); /** - * Get additional error information associated with the transport. + * Get additional information about the condition of the transport. * - * Whenever a transport operation fails (i.e. returns an error code), - * additional error details can be obtained using this function. The - * error object that is returned may also be used to clear the error - * condition. + * When a PN_TRANSPORT_ERROR event occurs, this operation can be used + * to access the details of the error condtion. * * The pointer returned by this operation is valid until the * transport object is freed. * * @param[in] transport the transport object - * @return the transport's error object + * @return the transport's condition object */ -PN_EXTERN pn_error_t *pn_transport_error(pn_transport_t *transport); +PN_EXTERN pn_condition_t *pn_transport_condition(pn_transport_t *transport); /** * Binds the transport to an AMQP connection. Modified: qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h?rev=1630854r1=1630853r2=1630854view=diff == --- qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h (original) +++ qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h Fri Oct 10 12:57:08 2014 @@ -127,6 +127,7 @@ struct pn_transport_t { uint32_t local_max_frame; uint32_t remote_max_frame; pn_condition_t remote_condition; + pn_condition_t condition; #define PN_IO_SSL 0 #define PN_IO_SASL 1 Modified: qpid/proton/branches/examples/proton-c/src/transport/transport.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/transport/transport.c?rev=1630854r1=1630853r2=1630854view=diff == --- qpid/proton/branches/examples/proton-c/src/transport/transport.c (original) +++ qpid/proton/branches/examples/proton-c/src/transport/transport.c Fri Oct 10 12:57:08 2014 @@ -163,6 +163,7 @@ static void pn_transport_initialize(void transport-remote_properties = pn_data(0); transport-disp_data = pn_data(0); pn_condition_init(transport-remote_condition); + pn_condition_init(transport-condition); transport-local_channels = pn_hash(PN_OBJECT, 0, 0.75); transport-remote_channels = pn_hash(PN_OBJECT, 0, 0.75); @@ -256,6 +257,7 @@ static void pn_transport_finalize(void * pn_free(transport-remote_properties); pn_free(transport-disp_data);
svn commit: r1630858 - in /qpid/proton/branches/examples: proton-c/bindings/python/proton.py tests/python/proton_tests/url.py
Author: gsim Date: Fri Oct 10 12:57:33 2014 New Revision: 1630858 URL: http://svn.apache.org/r1630858 Log: NO-JIRA: Fix URL test to not explode under jython. Turns out the proton test harness blows up when run under jython if you import socket in a test module. Works fine under real python. Go figure. Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py qpid/proton/branches/examples/tests/python/proton_tests/url.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630858r1=1630857r2=1630858view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:57:33 2014 @@ -3694,7 +3694,8 @@ class Url(object): An integer port number that can be constructed from a service name string def __new__(cls, value): - port = super(Url.Port, cls).__new__(cls, cls.port_int(value)) + @param value: integer port number or string service name. + port = super(Url.Port, cls).__new__(cls, cls._port_int(value)) setattr(port, 'name', str(value)) return port @@ -3703,7 +3704,7 @@ class Url(object): def __str__(self): return str(self.name) @staticmethod -def port_int(value): +def _port_int(value): Convert service, an integer or a service name, into an integer port number. try: return int(value) Modified: qpid/proton/branches/examples/tests/python/proton_tests/url.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/tests/python/proton_tests/url.py?rev=1630858r1=1630857r2=1630858view=diff == --- qpid/proton/branches/examples/tests/python/proton_tests/url.py (original) +++ qpid/proton/branches/examples/tests/python/proton_tests/url.py Fri Oct 10 12:57:33 2014 @@ -18,7 +18,7 @@ # -import common, socket +import common from proton import Url class UrlTest(common.Test): @@ -108,8 +108,9 @@ class UrlTest(common.Test): def testAmqps(self): Some old platforms don't recognize the amqps service name, this test is a no-op if that is the case otherwise verify we treat amqps correctly. -try: socket.getservbyname('amqps') -except: +try: +Url.Port('amqps') +except ValueError: print skipping: service 'amqps' not recognized on this platform return # Scheme defaults - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630852 - in /qpid/proton/branches/examples/proton-j/src: main/java/org/apache/qpid/proton/codec/EncoderImpl.java test/java/org/apache/qpid/proton/codec/StringTypeTest.java
Author: gsim Date: Fri Oct 10 12:56:52 2014 New Revision: 1630852 URL: http://svn.apache.org/r1630852 Log: PROTON-576: updates to bring things into line with the patch on the JIRA, rather than a stale older version I actually applied (not having a good day :P) Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/codec/EncoderImpl.java qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/codec/EncoderImpl.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/codec/EncoderImpl.java?rev=1630852r1=1630851r2=1630852view=diff == --- qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/codec/EncoderImpl.java (original) +++ qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/codec/EncoderImpl.java Fri Oct 10 12:56:52 2014 @@ -805,29 +805,14 @@ public final class EncoderImpl implement c = 0x01 + ((c 0x03FF) 10) + (low 0x03FF); - -if (c = 0x3) /* U+1..U+3 */ -{ -_buffer.put((byte) 0xF0); -_buffer.put((byte)(0x90 | ((c 12) 0x2F))); -_buffer.put((byte)(0x80 | ((c 6) 0x3F))); -_buffer.put((byte)(0x80 | (c 0x3F))); -} -else if (c = 0xF) /* U+4..U+F */ -{ -_buffer.put((byte)(0xF0 | ((c 18) 0x03))); -_buffer.put((byte)(0x80 | ((c 12) 0x3F))); -_buffer.put((byte)(0x80 | ((c 6) 0x3F))); -_buffer.put((byte)(0x80 | (c 0x3F))); -} -else /* U+10..U+10 */ -{ -_buffer.put((byte)(0xF4)); -_buffer.put((byte)(0x80 | ((c 12) 0x3F))); -_buffer.put((byte)(0x80 | ((c 6) 0x3F))); -_buffer.put((byte)(0x80 | (c 0x3F))); -} +_buffer.put((byte)(0xF0 | ((c 18) 0x07))); +_buffer.put((byte)(0x80 | ((c 12) 0x3F))); +_buffer.put((byte)(0x80 | ((c 6) 0x3F))); +_buffer.put((byte)(0x80 | (c 0x3F))); } } } + + + } Modified: qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java?rev=1630852r1=1630851r2=1630852view=diff == --- qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java (original) +++ qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java Fri Oct 10 12:56:52 2014 @@ -25,11 +25,11 @@ import static org.junit.Assert.assertEqu import java.lang.Character.UnicodeBlock; import java.nio.ByteBuffer; import java.nio.charset.Charset; +import java.util.Arrays; import java.util.HashSet; import java.util.Set; import org.junit.Test; - import org.apache.qpid.proton.amqp.messaging.AmqpValue; /** @@ -40,20 +40,21 @@ public class StringTypeTest private static final Charset CHARSET_UTF8 = Charset.forName(UTF-8); /** - * Loop over all the chars in a given {@link UnicodeBlock} and return a + * Loop over all the chars in given {@link UnicodeBlock}s and return a * {@link Set String} containing all the possible values as their * {@link String} values. * - * @param block the {@link UnicodeBlock} to loop over + * @param blocks the {@link UnicodeBlock}s to loop over * @return a {@link Set String} containing all the possible values as * {@link String} values */ -private static SetString getAllStringsFromUnicodeBlock(final UnicodeBlock block) +private static SetString getAllStringsFromUnicodeBlocks(final UnicodeBlock... blocks) { +final SetUnicodeBlock blockSet = new HashSetUnicodeBlock(Arrays.asList(blocks)); final SetString strings = new HashSetString(); for (int codePoint = 0; codePoint = Character.MAX_CODE_POINT; codePoint++) { -if (UnicodeBlock.of(codePoint) == block) +if (blockSet.contains(UnicodeBlock.of(codePoint))) { final int charCount = Character.charCount(codePoint); final StringBuilder sb = new StringBuilder( @@ -129,19 +130,18 @@ public class StringTypeTest { // non-surrogate pair blocks -
svn commit: r1630849 - in /qpid/proton/branches/examples: examples/include/pncompat/ proton-c/bindings/php/ proton-c/include/proton/ proton-c/src/ proton-c/src/codec/ proton-c/src/dispatcher/ proton-c
Author: gsim Date: Fri Oct 10 12:56:32 2014 New Revision: 1630849 URL: http://svn.apache.org/r1630849 Log: PROTON-696: Rearrange the header files: - Reduce transitive header inclusions - Remove proton/util.h and move its contents to src/util.h. All the defined symbols were internal. - Stop including with lines like #include ../blah.h as this isn't needed anymore. (Fixes windows breakage from PROTON-676) Removed: qpid/proton/branches/examples/proton-c/include/proton/util.h Modified: qpid/proton/branches/examples/examples/include/pncompat/misc_funcs.inc qpid/proton/branches/examples/proton-c/bindings/php/php.i qpid/proton/branches/examples/proton-c/include/proton/connection.h qpid/proton/branches/examples/proton-c/include/proton/driver.h qpid/proton/branches/examples/proton-c/include/proton/sasl.h qpid/proton/branches/examples/proton-c/include/proton/ssl.h qpid/proton/branches/examples/proton-c/src/codec/codec.c qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.c qpid/proton/branches/examples/proton-c/src/dispatcher/dispatcher.h qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h qpid/proton/branches/examples/proton-c/src/engine/engine.c qpid/proton/branches/examples/proton-c/src/message/message.c qpid/proton/branches/examples/proton-c/src/messenger/messenger.c qpid/proton/branches/examples/proton-c/src/messenger/store.c qpid/proton/branches/examples/proton-c/src/platform.c qpid/proton/branches/examples/proton-c/src/posix/driver.c qpid/proton/branches/examples/proton-c/src/posix/io.c qpid/proton/branches/examples/proton-c/src/posix/selector.c qpid/proton/branches/examples/proton-c/src/proton.c qpid/proton/branches/examples/proton-c/src/sasl/sasl.c qpid/proton/branches/examples/proton-c/src/ssl/openssl.c qpid/proton/branches/examples/proton-c/src/ssl/ssl_stub.c qpid/proton/branches/examples/proton-c/src/tests/parse-url.c qpid/proton/branches/examples/proton-c/src/transport/transport.c qpid/proton/branches/examples/proton-c/src/url.c qpid/proton/branches/examples/proton-c/src/util.c qpid/proton/branches/examples/proton-c/src/util.h qpid/proton/branches/examples/proton-c/src/windows/driver.c Modified: qpid/proton/branches/examples/examples/include/pncompat/misc_funcs.inc URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/examples/include/pncompat/misc_funcs.inc?rev=1630849r1=1630848r2=1630849view=diff == --- qpid/proton/branches/examples/examples/include/pncompat/misc_funcs.inc (original) +++ qpid/proton/branches/examples/examples/include/pncompat/misc_funcs.inc Fri Oct 10 12:56:32 2014 @@ -55,13 +55,14 @@ pn_timestamp_t time_now(void) return t.QuadPart / 1 - 1164447360; } #else -#include proton/util.h #include sys/time.h #include stddef.h +#include stdio.h +#include stdlib.h pn_timestamp_t time_now(void) { struct timeval now; - if (gettimeofday(now, NULL)) pn_fatal(gettimeofday failed\n); + if (gettimeofday(now, NULL)) {fprintf(stderr, gettimeofday failed\n); abort();} return ((pn_timestamp_t)now.tv_sec) * 1000 + (now.tv_usec / 1000); } #endif Modified: qpid/proton/branches/examples/proton-c/bindings/php/php.i URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/php/php.i?rev=1630849r1=1630848r2=1630849view=diff == --- qpid/proton/branches/examples/proton-c/bindings/php/php.i (original) +++ qpid/proton/branches/examples/proton-c/bindings/php/php.i Fri Oct 10 12:56:32 2014 @@ -29,12 +29,16 @@ %header %{ /* Include the headers needed by the code in this wrapper file */ #include proton/types.h -#include proton/url.h -#include proton/message.h +#include proton/connection.h +#include proton/condition.h +#include proton/delivery.h #include proton/driver.h #include proton/driver_extras.h +#include proton/event.h +#include proton/message.h #include proton/messenger.h -#include proton/ssl.h +#include proton/session.h +#include proton/url.h #define zend_error_noreturn zend_error %} Modified: qpid/proton/branches/examples/proton-c/include/proton/connection.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/connection.h?rev=1630849r1=1630848r2=1630849view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/connection.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/connection.h Fri Oct 10 12:56:32 2014 @@ -23,7 +23,12 @@ */ #include proton/import_export.h +#include proton/codec.h +#include proton/condition.h +#include proton/error.h #include proton/type_compat.h +#include proton/types.h + #include stddef.h #include sys/types.h Modified:
svn commit: r1630856 - /qpid/proton/branches/examples/tests/python/proton_tests/url.py
Author: gsim Date: Fri Oct 10 12:57:22 2014 New Revision: 1630856 URL: http://svn.apache.org/r1630856 Log: NO-JIRA: Fix URL test to skip 'amqps' tests if 'amqps' is not recognized as a service name. On some older Ubuntu with Java 6, 'amqps' is not recognized as a service name so skip those tests in that case. Modified: qpid/proton/branches/examples/tests/python/proton_tests/url.py Modified: qpid/proton/branches/examples/tests/python/proton_tests/url.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/tests/python/proton_tests/url.py?rev=1630856r1=1630855r2=1630856view=diff == --- qpid/proton/branches/examples/tests/python/proton_tests/url.py (original) +++ qpid/proton/branches/examples/tests/python/proton_tests/url.py Fri Oct 10 12:57:22 2014 @@ -18,7 +18,7 @@ # -import common +import common, socket from proton import Url class UrlTest(common.Test): @@ -44,12 +44,6 @@ class UrlTest(common.Test): self.assertEqual(str(url), me:secret@myhost/foobar) self.assertUrl(url, None, 'me', 'secret', 'myhost', None, 'foobar') -# Scheme defaults -self.assertEqual(str(Url(me:secret@myhost/foobar).defaults()), - amqp://me:secret@myhost:amqp/foobar) -# Correct port for amqps vs. amqps - self.assertEqual(str(Url(amqps://me:secret@myhost/foobar).defaults()), - amqps://me:secret@myhost:amqps/foobar) self.assertEqual(str(Url(amqp://me:secret@myhost/foobar).defaults()), amqp://me:secret@myhost:amqp/foobar) @@ -64,7 +58,6 @@ class UrlTest(common.Test): def testPort(self): self.assertPort(Url.Port('amqp'), 5672, 'amqp') self.assertPort(Url.Port(5672), 5672, '5672') -self.assertPort(Url.Port('amqps'), 5671, 'amqps') self.assertPort(Url.Port(5671), 5671, '5671') self.assertEqual(Url.Port(5671)+1, 5672) # Treat as int self.assertEqual(str(Url.Port(5672)), '5672') @@ -79,8 +72,6 @@ class UrlTest(common.Test): self.assertEqual(str(Url(host:amqp)), host:amqp) self.assertEqual(Url(host:amqp).port, 5672) -self.assertEqual(str(Url(host:amqps)), host:amqps) -self.assertEqual(Url(host:amqps).port, 5671) def testArgs(self): u = Url(amqp://u:p@host:amqp/path, scheme='foo', host='bar', port=1234, path='garden') @@ -113,3 +104,21 @@ class UrlTest(common.Test): (':1234', 'amqp://0.0.0.0:1234'), ('/path', 'amqp://0.0.0.0:amqp/path')]: self.assertEqual(str(Url(s).defaults()), full) + +def testAmqps(self): +Some old platforms don't recognize the amqps service name, this test is a no-op +if that is the case otherwise verify we treat amqps correctly. +try: socket.getservbyname('amqps') +except: +print skipping: service 'amqps' not recognized on this platform +return +# Scheme defaults +self.assertEqual(str(Url(me:secret@myhost/foobar).defaults()), + amqp://me:secret@myhost:amqp/foobar) +# Correct port for amqps vs. amqps + self.assertEqual(str(Url(amqps://me:secret@myhost/foobar).defaults()), + amqps://me:secret@myhost:amqps/foobar) + +self.assertPort(Url.Port('amqps'), 5671, 'amqps') +self.assertEqual(str(Url(host:amqps)), host:amqps) +self.assertEqual(Url(host:amqps).port, 5671) - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630861 - /qpid/proton/branches/examples/proton-c/src/windows/schannel.c
Author: gsim Date: Fri Oct 10 12:57:51 2014 New Revision: 1630861 URL: http://svn.apache.org/r1630861 Log: PROTON-581: part2, pick up minor changes since review board version Modified: qpid/proton/branches/examples/proton-c/src/windows/schannel.c Modified: qpid/proton/branches/examples/proton-c/src/windows/schannel.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/windows/schannel.c?rev=1630861r1=1630860r2=1630861view=diff == --- qpid/proton/branches/examples/proton-c/src/windows/schannel.c (original) +++ qpid/proton/branches/examples/proton-c/src/windows/schannel.c Fri Oct 10 12:57:51 2014 @@ -220,9 +220,9 @@ static int ssl_failed(pn_ssl_t *ssl, cha reason = buf; } ssl-ssl_closed = true; - ssl-app_input_closed = ssl-app_output_closed = PN_ERR; - ssl-transport-tail_closed = true; + ssl-app_input_closed = ssl-app_output_closed = PN_EOS; ssl-state = SSL_CLOSED; + pni_close_tail(ssl-transport); pn_do_error(ssl-transport, amqp:connection:framing-error, SSL Failure: %s, reason); return PN_EOS; } @@ -1118,7 +1118,7 @@ static ssize_t process_input_ssl(pn_io_l static ssize_t process_output_ssl( pn_io_layer_t *io_layer, char *buffer, size_t max_len) { pn_ssl_t *ssl = (pn_ssl_t *)io_layer-context; - if (!ssl) return PN_ERR; + if (!ssl) return PN_EOS; ssl_log( ssl, process_output_ssl( max_len=%d )\n,max_len ); ssize_t written = 0; @@ -1129,7 +1129,7 @@ static ssize_t process_output_ssl( pn_io // output buffers eclusively for internal handshake use until negotiation complete client_handshake_init(ssl); if (ssl-state == SSL_CLOSED) - return PN_ERR; + return PN_EOS; ssl-state = NEGOTIATING; } - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630860 - in /qpid/proton/branches/examples/proton-c: CMakeLists.txt src/windows/schannel.c
Author: gsim Date: Fri Oct 10 12:57:45 2014 New Revision: 1630860 URL: http://svn.apache.org/r1630860 Log: PROTON-581: SChannel client side TLS/SSL for Windows Added: qpid/proton/branches/examples/proton-c/src/windows/schannel.c Modified: qpid/proton/branches/examples/proton-c/CMakeLists.txt Modified: qpid/proton/branches/examples/proton-c/CMakeLists.txt URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/CMakeLists.txt?rev=1630860r1=1630859r2=1630860view=diff == --- qpid/proton/branches/examples/proton-c/CMakeLists.txt (original) +++ qpid/proton/branches/examples/proton-c/CMakeLists.txt Fri Oct 10 12:57:45 2014 @@ -46,11 +46,17 @@ find_package(OpenSSL) find_package (PythonInterp REQUIRED) -set(ssl_impl, none) +if(PN_WINAPI) + set(ssl_impl schannel) + set(ssl_providers 'none','schannel','openssl') +else(PN_WINAPI) + set(ssl_impl, none) + set(ssl_providers 'none','openssl') +endif(PN_WINAPI) if (OPENSSL_FOUND) set(ssl_impl openssl) -endif(OPENSSL_FOUND) -set(SSL_IMPL ${ssl_impl} CACHE STRING Library to use for SSL/TLS support. Valid values: 'none','openssl') +endif (OPENSSL_FOUND) +set(SSL_IMPL ${ssl_impl} CACHE STRING Library to use for SSL/TLS support. Valid values: ${ssl_providers}) mark_as_advanced (SSL_IMPL) configure_file ( @@ -96,7 +102,12 @@ if (SSL_IMPL STREQUAL openssl) include_directories (${OPENSSL_INCLUDE_DIR}) set (SSL_LIB ${OPENSSL_LIBRARIES}) else (SSL_IMPL STREQUAL openssl) - set (pn_driver_ssl_impl src/ssl/ssl_stub.c) + if (SSL_IMPL STREQUAL schannel) +set (pn_driver_ssl_impl src/windows/schannel.c) +set (SSL_LIB Crypt32.lib Secur32.lib) + else (SSL_IMPL STREQUAL schannel) +set (pn_driver_ssl_impl src/ssl/ssl_stub.c) + endif (SSL_IMPL STREQUAL schannel) endif (SSL_IMPL STREQUAL openssl) # First check whether we get clock_gettime without any special library linked Added: qpid/proton/branches/examples/proton-c/src/windows/schannel.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/windows/schannel.c?rev=1630860view=auto == --- qpid/proton/branches/examples/proton-c/src/windows/schannel.c (added) +++ qpid/proton/branches/examples/proton-c/src/windows/schannel.c Fri Oct 10 12:57:45 2014 @@ -0,0 +1,1320 @@ +/* + * + * 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. + * + */ + +/* + * SChannel is designed to encrypt and decrypt data in place. So a + * given buffer is expected to sometimes contain encrypted data, + * sometimes decrypted data, and occasionally both. Outgoing buffers + * need to reserve space for the TLS header and trailer. Read + * operations need to ignore the same headers and trailers from + * incoming buffers. Outgoing is simple because we choose record + * boundaries. Incoming is complicated by handling incomplete TLS + * records, and buffering contiguous data for the app layer that may + * span many records. A lazy double buffering system is used for + * the latter. + */ + +#include proton/ssl.h +#include proton/engine.h +#include engine/engine-internal.h +#include platform.h +#include util.h + +#include assert.h + +// security.h needs to see this to distinguish from kernel use. +#include windows.h +#define SECURITY_WIN32 +#include security.h +#include Schnlsp.h +#undef SECURITY_WIN32 + + +/** @file + * SSL/TLS support API. + * + * This file contains an SChannel-based implemention of the SSL/TLS API for Windows platforms. + */ + +#define SSL_DATA_SIZE 16384 +#define SSL_BUF_SIZE (SSL_DATA_SIZE + 5 + 2048 + 32) + +typedef enum { UNKNOWN_CONNECTION, SSL_CONNECTION, CLEAR_CONNECTION } connection_mode_t; +typedef struct pn_ssl_session_t pn_ssl_session_t; + +struct pn_ssl_domain_t { + int ref_count; + pn_ssl_mode_t mode; + bool has_ca_db; // true when CA database configured + bool has_certificate; // true when certificate configured + char *keyfile_pw; + + // settings used for all connections + pn_ssl_verify_mode_t verify_mode; + bool allow_unsecured; + + // SChannel + HCERTSTORE cert_store; + PCCERT_CONTEXT cert_context; + SCHANNEL_CRED credential;
svn commit: r1630855 - in /qpid/proton/branches/examples/proton-j/src: main/java/org/apache/qpid/proton/amqp/Binary.java test/java/org/apache/qpid/proton/amqp/BinaryTest.java
Author: gsim Date: Fri Oct 10 12:57:17 2014 New Revision: 1630855 URL: http://svn.apache.org/r1630855 Log: PROTON-698: return false if given object class differs, and shortcut equality of the object with itself Added: qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/amqp/BinaryTest.java Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/amqp/Binary.java Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/amqp/Binary.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/amqp/Binary.java?rev=1630855r1=1630854r2=1630855view=diff == --- qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/amqp/Binary.java (original) +++ qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/amqp/Binary.java Fri Oct 10 12:57:17 2014 @@ -50,6 +50,7 @@ public final class Binary return ByteBuffer.wrap(_data, _offset, _length); } +@Override public final int hashCode() { int hc = _hashCode; @@ -64,13 +65,20 @@ public final class Binary return hc; } +@Override public final boolean equals(Object o) { -Binary buf = (Binary) o; -if(o == null) +if (this == o) +{ +return true; +} + +if (o == null || getClass() != o.getClass()) { return false; } + +Binary buf = (Binary) o; final int size = _length; if (size != buf._length) { Added: qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/amqp/BinaryTest.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/amqp/BinaryTest.java?rev=1630855view=auto == --- qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/amqp/BinaryTest.java (added) +++ qpid/proton/branches/examples/proton-j/src/test/java/org/apache/qpid/proton/amqp/BinaryTest.java Fri Oct 10 12:57:17 2014 @@ -0,0 +1,108 @@ +/* + * + * 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 org.apache.qpid.proton.amqp; + +import static org.junit.Assert.*; + +import java.util.Arrays; + +import org.junit.Test; + +public class BinaryTest +{ + +@Test +public void testNotEqualsWithDifferentTypeObject() +{ +Binary bin = createSteppedValueBinary(10); + +assertFalse(Objects should not be equal with different type, bin.equals(not-a-Binary)); +} + +@Test +public void testEqualsWithItself() +{ +Binary bin = createSteppedValueBinary(10); + +assertTrue(Object should be equal to itself, bin.equals(bin)); +} + +@Test +public void testEqualsWithDifferentBinaryOfSameLengthAndContent() +{ +int length = 10; +Binary bin1 = createSteppedValueBinary(length); +Binary bin2 = createSteppedValueBinary(length); + +assertTrue(Objects should be equal, bin1.equals(bin2)); +assertTrue(Objects should be equal, bin2.equals(bin1)); +} + +@Test +public void testEqualsWithDifferentLengthBinaryOfDifferentBytes() +{ +int length1 = 10; +Binary bin1 = createSteppedValueBinary(length1); +Binary bin2 = createSteppedValueBinary(length1 + 1); + +assertFalse(Objects should not be equal, bin1.equals(bin2)); +assertFalse(Objects should not be equal, bin2.equals(bin1)); +} + +@Test +public void testEqualsWithDifferentLengthBinaryOfSameByte() +{ +Binary bin1 = createNewRepeatedValueBinary(10, (byte) 1); +Binary bin2 = createNewRepeatedValueBinary(123, (byte) 1); + +assertFalse(Objects should not be equal, bin1.equals(bin2)); +assertFalse(Objects should not be equal, bin2.equals(bin1)); +} + +@Test +public void testEqualsWithDifferentContentBinary() +{ +int length = 10; +Binary bin1 =
svn commit: r1630853 - /qpid/proton/branches/examples/proton-c/src/message/message.c
Author: gsim Date: Fri Oct 10 12:56:57 2014 New Revision: 1630853 URL: http://svn.apache.org/r1630853 Log: PROTON-661: applied patch from miguel Modified: qpid/proton/branches/examples/proton-c/src/message/message.c Modified: qpid/proton/branches/examples/proton-c/src/message/message.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/message/message.c?rev=1630853r1=1630852r2=1630853view=diff == --- qpid/proton/branches/examples/proton-c/src/message/message.c (original) +++ qpid/proton/branches/examples/proton-c/src/message/message.c Fri Oct 10 12:56:57 2014 @@ -975,6 +975,7 @@ int pn_message_save_data(pn_message_t *m pn_data_error(msg-body)); if (scanned) { if (bytes.size *size) { + *size = bytes.size; return PN_OVERFLOW; } else { memcpy(data, bytes.start, bytes.size); @@ -997,6 +998,7 @@ int pn_message_save_text(pn_message_t *m { pn_bytes_t str = pn_data_get_bytes(msg-body); if (str.size = *size) { + *size = str.size; return PN_OVERFLOW; } else { memcpy(data, str.start, str.size); - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630865 - /qpid/proton/branches/examples/proton-c/src/windows/iocp.c
Author: gsim Date: Fri Oct 10 12:58:12 2014 New Revision: 1630865 URL: http://svn.apache.org/r1630865 Log: PROTON-701: drop error message and allow faster detection of network failure for large number of forced failures during ctest Modified: qpid/proton/branches/examples/proton-c/src/windows/iocp.c Modified: qpid/proton/branches/examples/proton-c/src/windows/iocp.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/windows/iocp.c?rev=1630865r1=1630864r2=1630865view=diff == --- qpid/proton/branches/examples/proton-c/src/windows/iocp.c (original) +++ qpid/proton/branches/examples/proton-c/src/windows/iocp.c Fri Oct 10 12:58:12 2014 @@ -964,8 +964,15 @@ static void drain_zombie_completions(ioc } } + unsigned shutdown_grace = 2000; + char *override = getenv(PN_SHUTDOWN_GRACE); + if (override) { +int grace = atoi(override); +if (grace 0 grace 6) + shutdown_grace = (unsigned) grace; + } pn_timestamp_t now = pn_i_now(); - pn_timestamp_t deadline = now + 2000; + pn_timestamp_t deadline = now + shutdown_grace; while (pn_list_size(iocp-zombie_list)) { if (now = deadline) @@ -977,7 +984,7 @@ static void drain_zombie_completions(ioc } now = pn_i_now(); } - if (now = deadline pn_list_size(iocp-zombie_list)) + if (now = deadline pn_list_size(iocp-zombie_list) iocp-iocp_trace) // Should only happen if really slow TCP handshakes, i.e. total network failure iocp_log(network failure on Proton shutdown\n); } - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630866 - /qpid/proton/branches/examples/tools/cmake/Modules/FindPerlLibs.cmake
Author: gsim Date: Fri Oct 10 12:58:18 2014 New Revision: 1630866 URL: http://svn.apache.org/r1630866 Log: PROTON-465: FindPerlLibs fails on Ubuntu 12 If the search for libperl.so fails using the standard search in CMake, then this alternative tool kicks in and searchs other known locations for the file. Modified: qpid/proton/branches/examples/tools/cmake/Modules/FindPerlLibs.cmake Modified: qpid/proton/branches/examples/tools/cmake/Modules/FindPerlLibs.cmake URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/tools/cmake/Modules/FindPerlLibs.cmake?rev=1630866r1=1630865r2=1630866view=diff == --- qpid/proton/branches/examples/tools/cmake/Modules/FindPerlLibs.cmake (original) +++ qpid/proton/branches/examples/tools/cmake/Modules/FindPerlLibs.cmake Fri Oct 10 12:58:18 2014 @@ -29,6 +29,25 @@ if(NOT PERLLIBS_FOUND) # if either the library path is not found not set at all # then do our own search + if ( NOT PERL_LIBRARY ) +EXECUTE_PROCESS( COMMAND ${PERL_EXECUTABLE} -V:libperl + OUTPUT_VARIABLE PERL_LIBRARY_OUTPUT + RESULT_VARIABLE PERL_LIBRARY_RESULT ) + +IF ( NOT PERL_LIBRARY_RESULT ) + string(REGEX REPLACE libperl='([^']+)'.* \\1 PERL_POSSIBLE_LIBRARIES ${PERL_LIBRARY_OUTPUT}) +ENDIF ( NOT PERL_LIBRARY_RESULT ) + +MESSAGE ( STATUS Looking for ${PERL_POSSIBLE_LIBRARIES} ) + +find_file(PERL_LIBRARY + NAMES ${PERL_POSSIBLE_LIBRARIES} + PATHS /usr/lib +${PERL_ARCHLIB}/CORE + ) + + endif ( NOT PERL_LIBRARY ) + IF ( PERL_LIBRARY MATCHES .*-NOTFOUND OR NOT PERL_LIBRARY ) EXECUTE_PROCESS ( COMMAND ${PERL_EXECUTABLE} -MConfig -e print \$Config{libperl} - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630864 - in /qpid/proton/branches/examples: proton-c/src/windows/schannel.c tests/python/proton_tests/common.py
Author: gsim Date: Fri Oct 10 12:58:07 2014 New Revision: 1630864 URL: http://svn.apache.org/r1630864 Log: PROTON-701: alter test for isSSLPresent to check on server capability instead of client capability Modified: qpid/proton/branches/examples/proton-c/src/windows/schannel.c qpid/proton/branches/examples/tests/python/proton_tests/common.py Modified: qpid/proton/branches/examples/proton-c/src/windows/schannel.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/windows/schannel.c?rev=1630864r1=1630863r2=1630864view=diff == --- qpid/proton/branches/examples/proton-c/src/windows/schannel.c (original) +++ qpid/proton/branches/examples/proton-c/src/windows/schannel.c Fri Oct 10 12:58:07 2014 @@ -255,6 +255,8 @@ static void ssl_session_free( pn_ssl_ses pn_ssl_domain_t *pn_ssl_domain( pn_ssl_mode_t mode ) { + if (mode == PN_SSL_MODE_SERVER) +return NULL; // Temporary: not ready for ctest, hide from isSSLPresent() pn_ssl_domain_t *domain = (pn_ssl_domain_t *) calloc(1, sizeof(pn_ssl_domain_t)); if (!domain) return NULL; @@ -284,8 +286,9 @@ pn_ssl_domain_t *pn_ssl_domain( pn_ssl_m void pn_ssl_domain_free( pn_ssl_domain_t *domain ) { - if (--domain-ref_count == 0) { + if (!domain) return; + if (--domain-ref_count == 0) { if (domain-cert_context) CertFreeCertificateContext(domain-cert_context); if (domain-cert_store) Modified: qpid/proton/branches/examples/tests/python/proton_tests/common.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/tests/python/proton_tests/common.py?rev=1630864r1=1630863r2=1630864view=diff == --- qpid/proton/branches/examples/tests/python/proton_tests/common.py (original) +++ qpid/proton/branches/examples/tests/python/proton_tests/common.py Fri Oct 10 12:58:07 2014 @@ -82,7 +82,7 @@ def isSSLPresent(): True if a suitable SSL library is available. try: -xxx = SSLDomain(SSLDomain.MODE_CLIENT) +xxx = SSLDomain(SSLDomain.MODE_SERVER) return True except SSLUnavailable, e: # SSL libraries not installed - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630862 - /qpid/proton/branches/examples/proton-c/include/proton/io.h
Author: gsim Date: Fri Oct 10 12:57:56 2014 New Revision: 1630862 URL: http://svn.apache.org/r1630862 Log: PROTON-668: Document Proton-c IO restrictions for 0.8 release Modified: qpid/proton/branches/examples/proton-c/include/proton/io.h Modified: qpid/proton/branches/examples/proton-c/include/proton/io.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/io.h?rev=1630862r1=1630861r2=1630862view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/io.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/io.h Fri Oct 10 12:57:56 2014 @@ -31,6 +31,22 @@ extern C { #endif +/** + * A ::pn_socket_t provides an abstract handle to an IO stream. The + * pipe version is uni-directional. The network socket version is + * bi-directional. Both are non-blocking. + * + * pn_socket_t handles from ::pn_pipe() may only be used with + * ::pn_read(), ::pn_write(), ::pn_close() and pn_selector_select(). + * + * pn_socket_t handles from ::pn_listen(), ::pn_accept() and + * ::pn_connect() must perform further IO using Proton functions. + * Mixing Proton io.h functions with native IO functions on the same + * handles will result in undefined behavior. + * + * pn_socket_t handles may only be used with a single pn_io_t during + * their lifetime. + */ #if defined(_WIN32) ! defined(__CYGWIN__) #ifdef _WIN64 typedef unsigned __int64 pn_socket_t; @@ -43,7 +59,37 @@ typedef int pn_socket_t; #define PN_INVALID_SOCKET (-1) #endif +/** + * A ::pn_io_t manages IO for a group of pn_socket_t handles. A + * pn_io_t object may have zero or one pn_selector_t selectors + * associated with it (see ::pn_io_selector()). If one is associated, + * all the pn_socket_t handles managed by a pn_io_t must use that + * pn_selector_t instance. + * + * The pn_io_t interface is single-threaded. All methods are intended + * to be used by one thread at a time, except that multiple threads + * may use: + * + * ::pn_write() + * ::pn_send() + * ::pn_recv() + * ::pn_close() + * ::pn_selector_select() + * + * provided at most one thread is calling ::pn_selector_select() and + * the other threads are operating on separate pn_socket_t handles. + */ typedef struct pn_io_t pn_io_t; + +/** + * A ::pn_selector_t provides a selection mechanism that allows + * efficient monitoring of a large number of Proton connections and + * listeners. + * + * External (non-Proton) sockets may also be monitored, either solely + * for event notification (read, write, and timer) or event + * notification and use with pn_io_t interfaces. + */ typedef struct pn_selector_t pn_selector_t; PN_EXTERN pn_io_t *pn_io(void); - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630863 - /qpid/proton/branches/examples/tests/python/proton_tests/messenger.py
Author: gsim Date: Fri Oct 10 12:58:01 2014 New Revision: 1630863 URL: http://svn.apache.org/r1630863 Log: PROTON-701: skip tests with python selector competing with IOCP selector Modified: qpid/proton/branches/examples/tests/python/proton_tests/messenger.py Modified: qpid/proton/branches/examples/tests/python/proton_tests/messenger.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/tests/python/proton_tests/messenger.py?rev=1630863r1=1630862r2=1630863view=diff == --- qpid/proton/branches/examples/tests/python/proton_tests/messenger.py (original) +++ qpid/proton/branches/examples/tests/python/proton_tests/messenger.py Fri Oct 10 12:58:01 2014 @@ -984,6 +984,11 @@ class Pump: class SelectableMessengerTest(common.Test): def testSelectable(self, count = 1): +if os.name==nt: + # Conflict between native OS select() in Pump and IOCP based pn_selector_t + # makes this fail on Windows (see PROTON-668). + raise Skipped(Invalid test on Windows with IOCP.) + mrcv = Messenger() mrcv.passive = True mrcv.subscribe(amqp://~0.0.0.0:1234) - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630867 - /qpid/proton/branches/examples/proton-c/src/windows/selector.c
Author: gsim Date: Fri Oct 10 12:58:23 2014 New Revision: 1630867 URL: http://svn.apache.org/r1630867 Log: PROTON-702: mark interest in timer based on existence of deadline, not change in deadline Modified: qpid/proton/branches/examples/proton-c/src/windows/selector.c Modified: qpid/proton/branches/examples/proton-c/src/windows/selector.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/windows/selector.c?rev=1630867r1=1630866r2=1630867view=diff == --- qpid/proton/branches/examples/proton-c/src/windows/selector.c (original) +++ qpid/proton/branches/examples/proton-c/src/windows/selector.c Fri Oct 10 12:58:23 2014 @@ -162,6 +162,9 @@ void pn_selector_update(pn_selector_t *s if (pn_selectable_pending(selectable) 0) { interests |= PN_WRITABLE; } +if (selector-deadlines[idx]) { + interests |= PN_EXPIRED; +} interests_update(iocpd, interests); deadlines_update(iocpd, selector-deadlines[idx]); } @@ -245,13 +248,13 @@ int pn_selector_select(pn_selector_t *se selector-current = 0; selector-awoken = now; - selector-current_triggered = selector-triggered_list_head; for (iocpdesc_t *iocpd = selector-deadlines_head; iocpd; iocpd = iocpd-deadlines_next) { if (iocpd-deadline = now) pni_events_update(iocpd, iocpd-events | PN_EXPIRED); else break; } + selector-current_triggered = selector-triggered_list_head; return pn_error_code(selector-error); } @@ -332,18 +335,17 @@ static void deadlines_update(iocpdesc_t { if (deadline == iocpd-deadline) return; + iocpd-deadline = deadline; pn_selector_t *selector = iocpd-selector; if (!deadline) { deadlines_remove(selector, iocpd); pni_events_update(iocpd, iocpd-events ~PN_EXPIRED); -interests_update(iocpd, iocpd-interests ~PN_EXPIRED); } else { if (iocpd-deadlines_prev || selector-deadlines_head == iocpd) { deadlines_remove(selector, iocpd); pni_events_update(iocpd, iocpd-events ~PN_EXPIRED); } -interests_update(iocpd, iocpd-interests | PN_EXPIRED); iocpdesc_t *dl_iocpd = LL_HEAD(selector, deadlines); while (dl_iocpd dl_iocpd-deadline = deadline) dl_iocpd = dl_iocpd-deadlines_next; - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630868 - /qpid/proton/branches/examples/proton-c/bindings/python/proton.py
Author: gsim Date: Fri Oct 10 12:58:28 2014 New Revision: 1630868 URL: http://svn.apache.org/r1630868 Log: added connection accessor to proton binding Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630868r1=1630867r2=1630868view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:58:28 2014 @@ -3140,6 +3140,10 @@ The idle timeout of the connection (floa def condition(self): return cond2obj(pn_transport_condition(self._trans)) + @property + def connection(self): +return Connection._wrap_connection(pn_transport_connection(self._trans)) + class SASLException(TransportException): pass - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630870 - in /qpid/proton/branches/examples/proton-c: include/proton/transport.h src/engine/engine-internal.h src/transport/transport.c
Author: gsim Date: Fri Oct 10 12:58:40 2014 New Revision: 1630870 URL: http://svn.apache.org/r1630870 Log: add a backwords compatible pn_transport_error Modified: qpid/proton/branches/examples/proton-c/include/proton/transport.h qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h qpid/proton/branches/examples/proton-c/src/transport/transport.c Modified: qpid/proton/branches/examples/proton-c/include/proton/transport.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/include/proton/transport.h?rev=1630870r1=1630869r2=1630870view=diff == --- qpid/proton/branches/examples/proton-c/include/proton/transport.h (original) +++ qpid/proton/branches/examples/proton-c/include/proton/transport.h Fri Oct 10 12:58:40 2014 @@ -118,6 +118,11 @@ PN_EXTERN void pn_transport_free(pn_tran PN_EXTERN pn_condition_t *pn_transport_condition(pn_transport_t *transport); /** + * @deprecated + */ +PN_EXTERN pn_error_t *pn_transport_error(pn_transport_t *transport); + +/** * Binds the transport to an AMQP connection. * * @return an error code, or 0 on success Modified: qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h?rev=1630870r1=1630869r2=1630870view=diff == --- qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h (original) +++ qpid/proton/branches/examples/proton-c/src/engine/engine-internal.h Fri Oct 10 12:58:40 2014 @@ -128,6 +128,7 @@ struct pn_transport_t { uint32_t remote_max_frame; pn_condition_t remote_condition; pn_condition_t condition; + pn_error_t *error; #define PN_IO_SSL 0 #define PN_IO_SASL 1 Modified: qpid/proton/branches/examples/proton-c/src/transport/transport.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/transport/transport.c?rev=1630870r1=1630869r2=1630870view=diff == --- qpid/proton/branches/examples/proton-c/src/transport/transport.c (original) +++ qpid/proton/branches/examples/proton-c/src/transport/transport.c Fri Oct 10 12:58:40 2014 @@ -164,6 +164,7 @@ static void pn_transport_initialize(void transport-disp_data = pn_data(0); pn_condition_init(transport-remote_condition); pn_condition_init(transport-condition); + transport-error = pn_error(); transport-local_channels = pn_hash(PN_OBJECT, 0, 0.75); transport-remote_channels = pn_hash(PN_OBJECT, 0, 0.75); @@ -258,6 +259,7 @@ static void pn_transport_finalize(void * pn_free(transport-disp_data); pn_condition_tini(transport-remote_condition); pn_condition_tini(transport-condition); + pn_error_free(transport-error); pn_free(transport-local_channels); pn_free(transport-remote_channels); if (transport-input_buf) free(transport-input_buf); @@ -349,7 +351,15 @@ int pn_transport_unbind(pn_transport_t * pn_error_t *pn_transport_error(pn_transport_t *transport) { - return NULL; + assert(transport); + if (pn_condition_is_set(transport-condition)) { +pn_error_format(transport-error, PN_ERR, %s: %s, +pn_condition_get_name(transport-condition), +pn_condition_get_description(transport-condition)); + } else { +pn_error_clear(transport-error); + } + return transport-error; } pn_condition_t *pn_transport_condition(pn_transport_t *transport) - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630872 - /qpid/proton/branches/examples/proton-c/src/messenger/messenger.c.orig
Author: gsim Date: Fri Oct 10 12:58:50 2014 New Revision: 1630872 URL: http://svn.apache.org/r1630872 Log: PROTON-676: Removed file added in error Removed: qpid/proton/branches/examples/proton-c/src/messenger/messenger.c.orig - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630873 - in /qpid/proton/branches/examples: proton-c/bindings/python/proton.py tests/python/proton_tests/url.py
Author: gsim Date: Fri Oct 10 12:58:56 2014 New Revision: 1630873 URL: http://svn.apache.org/r1630873 Log: PROTON-693: If the system doesn't have port definitions for amqp/amqps use the default values of 5672/5671. - Not all systems have /etc/service (or similar) files that define these ports, but our tests use them and the defaults are these strings. Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py qpid/proton/branches/examples/tests/python/proton_tests/url.py Modified: qpid/proton/branches/examples/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/bindings/python/proton.py?rev=1630873r1=1630872r2=1630873view=diff == --- qpid/proton/branches/examples/proton-c/bindings/python/proton.py (original) +++ qpid/proton/branches/examples/proton-c/bindings/python/proton.py Fri Oct 10 12:58:56 2014 @@ -3716,7 +3716,11 @@ class Url(object): try: return socket.getservbyname(value) except socket.error: - raise ValueError(Not a valid port number or service name: '%s' % value) + # Not every system has amqp/amqps defined as a service + if value == Url.AMQPS: return 5671 + elif value == Url.AMQP: return 5672 + else: +raise ValueError(Not a valid port number or service name: '%s' % value) def __init__(self, url=None, **kwargs): Modified: qpid/proton/branches/examples/tests/python/proton_tests/url.py URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/tests/python/proton_tests/url.py?rev=1630873r1=1630872r2=1630873view=diff == --- qpid/proton/branches/examples/tests/python/proton_tests/url.py (original) +++ qpid/proton/branches/examples/tests/python/proton_tests/url.py Fri Oct 10 12:58:56 2014 @@ -106,13 +106,6 @@ class UrlTest(common.Test): self.assertEqual(str(Url(s).defaults()), full) def testAmqps(self): -Some old platforms don't recognize the amqps service name, this test is a no-op -if that is the case otherwise verify we treat amqps correctly. -try: -Url.Port('amqps') -except ValueError: -print skipping: service 'amqps' not recognized on this platform -return # Scheme defaults self.assertEqual(str(Url(me:secret@myhost/foobar).defaults()), amqp://me:secret@myhost:amqp/foobar) - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630875 - /qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
Author: gsim Date: Fri Oct 10 12:59:08 2014 New Revision: 1630875 URL: http://svn.apache.org/r1630875 Log: NO-JIRA: add basic config toggle for the length of payload included in the frame trace logging, for cases where the hard coded value doesnt quite suit Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java Modified: qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java?rev=1630875r1=1630874r2=1630875view=diff == --- qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java (original) +++ qpid/proton/branches/examples/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java Fri Oct 10 12:59:08 2014 @@ -76,6 +76,7 @@ public class TransportImpl extends Endpo } private static final boolean FRM_ENABLED = getBooleanEnv(PN_TRACE_FRM); +private static final int TRACE_FRAME_PAYLOAD_LENGTH = Integer.getInteger(proton.trace_frame_payload_length, 80); // trace levels private int _levels = (FRM_ENABLED ? this.TRACE_FRM : 0); @@ -1452,8 +1453,8 @@ public class TransportImpl extends Endpo msg.append( ).append(event).append( ).append(frame.getBody()); if (frame.getPayload() != null) { String payload = frame.getPayload().toString(); -if (payload.length() 80) { -payload = payload.substring(0, 80) + ( + payload.length() + ); +if (payload.length() TRACE_FRAME_PAYLOAD_LENGTH) { +payload = payload.substring(0, TRACE_FRAME_PAYLOAD_LENGTH) + ( + payload.length() + ); } msg.append( \).append(payload).append(\); } - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630876 - /qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java
Author: gsim Date: Fri Oct 10 12:59:15 2014 New Revision: 1630876 URL: http://svn.apache.org/r1630876 Log: PROTON-704: subtract 1 when setting delivery-count header based on JMSXDeliveryCount during outbound JMS transformation Modified: qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java Modified: qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java?rev=1630876r1=1630875r2=1630876view=diff == --- qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java (original) +++ qpid/proton/branches/examples/contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/JMSMappingOutboundTransformer.java Fri Oct 10 12:59:15 2014 @@ -166,7 +166,12 @@ public class JMSMappingOutboundTransform } else if( key.equals(firstAcquirerKey) ) { header.setFirstAcquirer(msg.getBooleanProperty(key)); } else if( key.startsWith(JMSXDeliveryCount) ) { -header.setDeliveryCount(new UnsignedInteger(msg.getIntProperty(key))); +// The AMQP delivery-count field only includes prior failed delivery attempts, +// whereas JMSXDeliveryCount includes the first/current delivery attempt. +int amqpDeliveryCount = msg.getIntProperty(key) - 1; +if( amqpDeliveryCount 0 ) { +header.setDeliveryCount(new UnsignedInteger(amqpDeliveryCount)); +} } else if( key.startsWith(JMSXUserID) ) { String value = msg.getStringProperty(key); props.setUserId(new Binary(value.getBytes(UTF-8))); - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630874 - in /qpid/proton/branches/examples/proton-c/src: platform.h ssl/openssl.c util.c util.h
Author: gsim Date: Fri Oct 10 12:59:02 2014 New Revision: 1630874 URL: http://svn.apache.org/r1630874 Log: PROTON-660: Fix openssl.c build on windows Modified: qpid/proton/branches/examples/proton-c/src/platform.h qpid/proton/branches/examples/proton-c/src/ssl/openssl.c qpid/proton/branches/examples/proton-c/src/util.c qpid/proton/branches/examples/proton-c/src/util.h Modified: qpid/proton/branches/examples/proton-c/src/platform.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/platform.h?rev=1630874r1=1630873r2=1630874view=diff == --- qpid/proton/branches/examples/proton-c/src/platform.h (original) +++ qpid/proton/branches/examples/proton-c/src/platform.h Fri Oct 10 12:59:02 2014 @@ -78,10 +78,20 @@ int64_t pn_i_atoll(const char* num); * Provide the expected C99 behavior for these functions. */ #include stdio.h + #define snprintf pn_i_snprintf #define vsnprintf pn_i_vsnprintf + int pn_i_snprintf(char *buf, size_t count, const char *fmt, ...); int pn_i_vsnprintf(char *buf, size_t count, const char *fmt, va_list ap); + +#define strcasecmp(A,B) (!pni_eq_nocase(A,B)) +#define strncasecmp(A,B,C) (!pni_eq_n_nocase(A,B,C)) + +#if !defined(S_ISDIR) +# define S_ISDIR(X) ((X) _S_IFDIR) +#endif + #endif #if defined _MSC_VER || defined _OPENVMS Modified: qpid/proton/branches/examples/proton-c/src/ssl/openssl.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/ssl/openssl.c?rev=1630874r1=1630873r2=1630874view=diff == --- qpid/proton/branches/examples/proton-c/src/ssl/openssl.c (original) +++ qpid/proton/branches/examples/proton-c/src/ssl/openssl.c Fri Oct 10 12:59:02 2014 @@ -25,6 +25,22 @@ #include platform.h #include util.h +// openssl on windows expects the user to have already included +// winsock.h + +#ifdef _MSC_VER +#ifndef _WIN32_WINNT +#define _WIN32_WINNT 0x0501 +#endif +#if _WIN32_WINNT 0x0501 +#error Proton requires Windows API support for XP or later. +#endif +#include winsock2.h +#include mswsock.h +#include Ws2tcpip.h +#endif + + #include openssl/ssl.h #include openssl/dh.h #include openssl/err.h Modified: qpid/proton/branches/examples/proton-c/src/util.c URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/util.c?rev=1630874r1=1630873r2=1630874view=diff == --- qpid/proton/branches/examples/proton-c/src/util.c (original) +++ qpid/proton/branches/examples/proton-c/src/util.c Fri Oct 10 12:59:02 2014 @@ -213,7 +213,7 @@ void pni_fatal(const char *fmt, ...) va_end(ap); } -static bool pn_i_eq_nocase(const char *a, const char *b) +bool pni_eq_nocase(const char *a, const char *b) { while (*b) { if (tolower(*a++) != tolower(*b++)) @@ -222,11 +222,20 @@ static bool pn_i_eq_nocase(const char *a return !(*a); } +bool pni_eq_n_nocase(const char *a, const char *b, int len) +{ + while (*b len-- 0 ) { +if (tolower(*a++) != tolower(*b++)) + return false; + } + return !(*a) !(*b); +} + bool pn_env_bool(const char *name) { char *v = getenv(name); - return v (pn_i_eq_nocase(v, true) || pn_i_eq_nocase(v, 1) || - pn_i_eq_nocase(v, yes) || pn_i_eq_nocase(v, on)); + return v (pni_eq_nocase(v, true) || pni_eq_nocase(v, 1) || + pni_eq_nocase(v, yes) || pni_eq_nocase(v, on)); } char *pn_strdup(const char *src) Modified: qpid/proton/branches/examples/proton-c/src/util.h URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/util.h?rev=1630874r1=1630873r2=1630874view=diff == --- qpid/proton/branches/examples/proton-c/src/util.h (original) +++ qpid/proton/branches/examples/proton-c/src/util.h Fri Oct 10 12:59:02 2014 @@ -40,6 +40,8 @@ PN_EXTERN ssize_t pn_quote_data(char *ds int pn_quote(pn_string_t *dst, const char *src, size_t size); PN_EXTERN void pn_fprint_data(FILE *stream, const char *bytes, size_t size); PN_EXTERN void pn_print_data(const char *bytes, size_t size); +bool pni_eq_nocase(const char *a, const char *b); +bool pni_eq_n_nocase(const char *a, const char *b, int len); bool pn_env_bool(const char *name); pn_timestamp_t pn_timestamp_min(pn_timestamp_t a, pn_timestamp_t b); - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630879 - /qpid/proton/branches/examples/proton-c/CMakeLists.txt
Author: gsim Date: Fri Oct 10 12:59:29 2014 New Revision: 1630879 URL: http://svn.apache.org/r1630879 Log: NO-JIRA: If we didn't build the python bindings then we can't run python tests Modified: qpid/proton/branches/examples/proton-c/CMakeLists.txt Modified: qpid/proton/branches/examples/proton-c/CMakeLists.txt URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/CMakeLists.txt?rev=1630879r1=1630878r2=1630879view=diff == --- qpid/proton/branches/examples/proton-c/CMakeLists.txt (original) +++ qpid/proton/branches/examples/proton-c/CMakeLists.txt Fri Oct 10 12:59:29 2014 @@ -484,21 +484,23 @@ mark_as_advanced (VALGRIND_EXE) add_subdirectory(src/tests) # python test: tests/python/proton-test -set (py_root ${pn_test_root}/python) -set (py_src ${CMAKE_CURRENT_SOURCE_DIR}/bindings/python) -set (py_bin ${CMAKE_CURRENT_BINARY_DIR}/bindings/python) -set (py_bld ${CMAKE_CURRENT_BINARY_DIR}${bld_suffix}) # For windows -set (app_path ${pn_test_bin}/tools/apps/c${bld_suffix}) -set (app_path ${app_path}:${pn_test_root}/tools/apps/python) -set_path (py_path ${py_bin}:${py_bld}:${app_path}:$ENV{PATH}) -set_path (py_pythonpath ${py_root}:${py_src}:${py_bin}:${py_bld}|$ENV{PYTHONPATH}) -if (CMAKE_SYSTEM_NAME STREQUAL Windows) - set_path (py_pythonpath ${py_bin}${bld_suffix}:${py_pythonpath}) -endif (CMAKE_SYSTEM_NAME STREQUAL Windows) -add_test (python-test ${PYTHON_EXECUTABLE} ${env_py} - PATH=${py_path} PYTHONPATH=${py_pythonpath} ${VALGRIND_ENV} - ${PYTHON_EXECUTABLE} ${py_root}/proton-test) -set_tests_properties(python-test PROPERTIES PASS_REGULAR_EXPRESSION Totals: .* 0 failed) +if (BUILD_PYTHON) + set (py_root ${pn_test_root}/python) + set (py_src ${CMAKE_CURRENT_SOURCE_DIR}/bindings/python) + set (py_bin ${CMAKE_CURRENT_BINARY_DIR}/bindings/python) + set (py_bld ${CMAKE_CURRENT_BINARY_DIR}${bld_suffix}) # For windows + set (app_path ${pn_test_bin}/tools/apps/c${bld_suffix}) + set (app_path ${app_path}:${pn_test_root}/tools/apps/python) + set_path (py_path ${py_bin}:${py_bld}:${app_path}:$ENV{PATH}) + set_path (py_pythonpath ${py_root}:${py_src}:${py_bin}:${py_bld}|$ENV{PYTHONPATH}) + if (CMAKE_SYSTEM_NAME STREQUAL Windows) +set_path (py_pythonpath ${py_bin}${bld_suffix}:${py_pythonpath}) + endif (CMAKE_SYSTEM_NAME STREQUAL Windows) + add_test (python-test ${PYTHON_EXECUTABLE} ${env_py} +PATH=${py_path} PYTHONPATH=${py_pythonpath} ${VALGRIND_ENV} +${PYTHON_EXECUTABLE} ${py_root}/proton-test) + set_tests_properties(python-test PROPERTIES PASS_REGULAR_EXPRESSION Totals: .* 0 failed) +endif (BUILD_PYTHON) find_program(RUBY_EXE ruby) if (RUBY_EXE) - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org
svn commit: r1630878 - /qpid/proton/branches/examples/proton-c/src/tests/CMakeLists.txt
Author: gsim Date: Fri Oct 10 12:59:25 2014 New Revision: 1630878 URL: http://svn.apache.org/r1630878 Log: PROTON-705: Work with older versions of CMake too Modified: qpid/proton/branches/examples/proton-c/src/tests/CMakeLists.txt Modified: qpid/proton/branches/examples/proton-c/src/tests/CMakeLists.txt URL: http://svn.apache.org/viewvc/qpid/proton/branches/examples/proton-c/src/tests/CMakeLists.txt?rev=1630878r1=1630877r2=1630878view=diff == --- qpid/proton/branches/examples/proton-c/src/tests/CMakeLists.txt (original) +++ qpid/proton/branches/examples/proton-c/src/tests/CMakeLists.txt Fri Oct 10 12:59:25 2014 @@ -31,7 +31,7 @@ macro (pn_add_c_test test file) if (CMAKE_SYSTEM_NAME STREQUAL Windows) get_target_property(QPID_PROTON_TARGET qpid-proton LOCATION_${bld_suffix}) get_target_property(${test}_LOCATION ${test} LOCATION_${bld_suffix}) -get_filename_component(QPID_PROTON_TARGET_DIR ${QPID_PROTON_TARGET} DIRECTORY) +get_filename_component(QPID_PROTON_TARGET_DIR ${QPID_PROTON_TARGET} PATH) add_test (${test} ${PYTHON_EXECUTABLE} ${env_py} PATH=${QPID_PROTON_TARGET_DIR} ${${test}_LOCATION}) - To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org