Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
P
paho.mqtt.c
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
eclipse
paho.mqtt.c
Commits
60b2825e
Commit
60b2825e
authored
Dec 18, 2013
by
Ian Craggs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Build and test for windows
parent
1359abdd
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
461 additions
and
4 deletions
+461
-4
build.xml
build.xml
+45
-3
Makefile
build/Makefile
+1
-1
MQTTTest_v2.c
test/MQTTTest_v2.c
+415
-0
No files found.
build.xml
View file @
60b2825e
...
@@ -142,7 +142,49 @@
...
@@ -142,7 +142,49 @@
<elseif>
<elseif>
<os
family=
"windows"
/>
<os
family=
"windows"
/>
<then>
<then>
<property
name=
"clflags.so"
value=
"/D WIN32 /D _UNICODE /D UNICODE /D _CRT_SECURE_NO_WARNINGS
/nologo /c /O2 /W3 /Fd /MD /TC"
/>
<property
name=
"ldflags.so"
value=
"/dll /nologo /machine:x86 /manifest"
/>
<mkdir
dir=
"${output.folder}"
/>
<delete>
<fileset
dir=
"${output.folder}"
includes=
"*.obj"
/>
</delete>
<!-- non-SSL, synchronous library -->
<property
name=
"output.filename"
value=
"${output.folder}/${libname}.dll"
/>
<exec
executable=
"cl"
failonerror=
"true"
>
<arg
line=
"${clflags.so} /I src /Fo${output.folder}/ ${sync.source.files}"
/>
</exec>
<exec
executable=
"link"
failonerror=
"true"
>
<arg
line=
"${ldflags.so} /out:${output.filename} ws2_32.lib ${output.folder}/*.obj"
/>
</exec>
<exec
executable=
"mt"
failonerror=
"true"
>
<arg
line=
"-manifest ${output.folder}/{libname}.dll.manifest -outputresource:${output.filename}\;2"
/>
</exec>
<delete>
<fileset
dir=
"${output.folder}"
includes=
"*.obj"
/>
</delete>
<!-- non-SSL, asynchronous library -->
<property
name=
"output.async.filename"
value=
"${output.folder}/${libname.async}.dll"
/>
<exec
executable=
"cl"
failonerror=
"true"
>
<arg
line=
"${clflags.so} /I src /Fo${output.folder}/ ${async.source.files}"
/>
</exec>
<exec
executable=
"link"
failonerror=
"true"
>
<arg
line=
"${ldflags.so} /out:${output.async.filename} ws2_32.lib ${output.folder}/*.obj"
/>
</exec>
<exec
executable=
"mt"
failonerror=
"true"
>
<arg
line=
"-manifest ${output.folder}/{libname.async}.dll.manifest -outputresource:${output.async.filename}\;2"
/>
</exec>
<delete>
<fileset
dir=
"${output.folder}"
includes=
"*.obj"
/>
</delete>
</then>
</then>
</elseif>
</elseif>
</if>
</if>
...
...
build/Makefile
View file @
60b2825e
...
@@ -418,7 +418,7 @@ $(MQTTDLL_S): ${SOURCE_FILES_S} ${HEADERS}
...
@@ -418,7 +418,7 @@ $(MQTTDLL_S): ${SOURCE_FILES_S} ${HEADERS}
$(LD)
$(LIBLDFLAGS_S)
*
.obj /out:
$(MQTTDLL_S)
$(LD)
$(LIBLDFLAGS_S)
*
.obj /out:
$(MQTTDLL_S)
mt
-manifest
windows_ia32/mqttv3cs.dll.manifest
-outputresource
:
$(MQTTDLL_S)
\;
2
mt
-manifest
windows_ia32/mqttv3cs.dll.manifest
-outputresource
:
$(MQTTDLL_S)
\;
2
$(MQTTDLL_AS)
:
${SOURCE_FILES} ${HEADERS}
$(MQTTDLL_AS)
:
${SOURCE_FILES
_AS
} ${HEADERS}
-
rm
-f
*
.obj
-
rm
-f
*
.obj
${
CC
}
${
CPPFLAGS
}
${
CFLAGS
}
${
CPPFLAGS_S
}
/I
${
MQTTCLIENT_DIR
}
/I
${
MQTTCLIENT_DIR
}
/.. /Fo
${
SOURCE_FILES_AS
}
${
CC
}
${
CPPFLAGS
}
${
CFLAGS
}
${
CPPFLAGS_S
}
/I
${
MQTTCLIENT_DIR
}
/I
${
MQTTCLIENT_DIR
}
/.. /Fo
${
SOURCE_FILES_AS
}
$(LD)
$(LIBLDFLAGS_S)
*
.obj /out:
$(MQTTDLL_AS)
$(LD)
$(LIBLDFLAGS_S)
*
.obj /out:
$(MQTTDLL_AS)
...
...
test/MQTTTest_v2.c
0 → 100644
View file @
60b2825e
/*
* -----------------------------------------------------------------
* IBM Websphere MQ Telemetry
* MQTTV3ASample MQTT v3 Asynchronous Client application
*
* Version: @(#) MQMBID sn=p000-L130522.1 su=_M3QBMsMbEeK31Ln-reX3cg pn=com.ibm.mq.mqxr.listener/SDK/clients/c/samples/MQTTV3ASample.c
*
* <copyright
* notice="lm-source-program"
* pids="5724-H72,"
* years="2010,2012"
* crc="218290716" >
* Licensed Materials - Property of IBM
*
* 5724-H72,
*
* (C) Copyright IBM Corp. 2010, 2012 All Rights Reserved.
*
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with
* IBM Corp.
* </copyright>
* -----------------------------------------------------------------
*/
/**
* This sample application demonstrates basic usage
* of the MQTT v3 Asynchronous Client api.
*
* It can be run in one of two modes:
* - as a publisher, sending a single message to a topic on the server
* - as a subscriber, listening for messages from the server
*
*/
#include <memory.h>
#include <MQTTAsync.h>
#include <MQTTClientPersistence.h>
#include <signal.h>
#include <stdio.h>
#if defined(WIN32)
#include <Windows.h>
#define sleep Sleep
#else
#include <stdlib.h>
#include <sys/time.h>
#endif
volatile
int
toStop
=
0
;
volatile
int
finished
=
0
;
volatile
int
connected
=
0
;
volatile
int
quietMode
=
0
;
volatile
int
sent
=
0
;
volatile
int
delivery
=
0
;
volatile
MQTTAsync_token
deliveredtoken
;
static
char
clientId
[
24
];
struct
Options
{
char
*
action
;
char
*
topic
;
char
*
message
;
int
qos
;
char
*
broker
;
char
*
port
;
int
message_count
;
}
options
=
{
"publish"
,
NULL
,
"2"
,
2
,
"localhost"
,
"1883"
,
100
};
void
printHelp
()
{
printf
(
"Syntax:
\n\n
"
);
printf
(
" MQTTV3ASample [-h] [-a publish|subscribe] [-t <topic>] [-m <message text>]
\n
"
);
printf
(
" [-s 0|1|2] [-b <hostname|IP address>] [-p <brokerport>]
\n\n
"
);
printf
(
" -h Print this help text and quit
\n
"
);
printf
(
" -q Quiet mode (default is false)
\n
"
);
printf
(
" -a Perform the relevant action (default is publish)
\n
"
);
printf
(
" -t Publish/subscribe to <topic> instead of the default
\n
"
);
printf
(
" (publish:
\"
MQTTV3ASample/C/v3
\"
, subscribe:
\"
MQTTV3ASample/#
\"
)
\n
"
);
printf
(
" -m Use this message instead of the default (
\"
Message from MQTTv3 C asynchronous client
\"
)
\n
"
);
printf
(
" -s Use this QoS instead of the default (2)
\n
"
);
printf
(
" -b Use this name/IP address instead of the default (localhost)
\n
"
);
printf
(
" -p Use this port instead of the default (1883)
\n
"
);
printf
(
"
\n
Delimit strings containing spaces with
\"\"\n
"
);
printf
(
"
\n
Publishers transmit a single message then disconnect from the broker.
\n
"
);
printf
(
"Subscribers remain connected to the broker and receive appropriate messages
\n
"
);
printf
(
"until Control-C (^C) is received from the keyboard.
\n\n
"
);
}
void
handleSignal
(
int
sig
)
{
toStop
=
1
;
}
int
messageArrived
(
void
*
context
,
char
*
topicName
,
int
topicLen
,
MQTTAsync_message
*
message
)
{
int
i
;
char
*
payloadptr
;
if
((
sent
++
%
1000
)
==
0
)
printf
(
"%d messages received
\n
"
,
sent
++
);
//printf("Message arrived\n");
//printf(" topic: %s\n", topicName);
//printf(" message: ");
//payloadptr = message->payload;
//for(i=0; i<message->payloadlen; i++)
//{
// putchar(*payloadptr++);
//}
//putchar('\n');
MQTTAsync_freeMessage
(
&
message
);
MQTTAsync_free
(
topicName
);
return
1
;
}
void
onSubscribe
(
void
*
context
,
MQTTAsync_successData
*
response
)
{
printf
(
"Subscribe succeeded
\n
"
);
}
void
onSubscribeFailure
(
void
*
context
,
MQTTAsync_failureData
*
response
)
{
printf
(
"Subscribe failed
\n
"
);
finished
=
1
;
}
void
onDisconnect
(
void
*
context
,
MQTTAsync_successData
*
response
)
{
printf
(
"Successful disconnection
\n
"
);
finished
=
1
;
}
void
onSendFailure
(
void
*
context
,
MQTTAsync_failureData
*
response
)
{
printf
(
"onSendFailure: message with token value %d delivery failed
\n
"
,
response
->
token
);
}
void
onSend
(
void
*
context
,
MQTTAsync_successData
*
response
)
{
static
int
last_send
=
0
;
if
(
response
->
token
-
last_send
!=
1
)
printf
(
"Error in onSend, token value %d, last_send %d
\n
"
,
response
->
token
,
last_send
);
last_send
++
;
if
((
response
->
token
%
1000
)
==
0
)
printf
(
"onSend: message with token value %d delivery confirmed
\n
"
,
response
->
token
);
}
void
deliveryComplete
(
void
*
context
,
MQTTAsync_token
token
)
{
sent
++
;
if
((
sent
%
1000
)
==
0
)
printf
(
"deliveryComplete: message with token value %d delivery confirmed
\n
"
,
token
);
if
(
sent
!=
token
)
printf
(
"Error, sent %d != token %d
\n
"
,
sent
,
token
);
if
(
sent
==
options
.
message_count
)
toStop
=
1
;
}
void
onConnectFailure
(
void
*
context
,
MQTTAsync_failureData
*
response
)
{
printf
(
"Connect failed
\n
"
);
finished
=
1
;
}
void
onConnect
(
void
*
context
,
MQTTAsync_successData
*
response
)
{
printf
(
"Connected
\n
"
);
connected
=
1
;
}
void
connectionLost
(
void
*
context
,
char
*
cause
)
{
MQTTAsync
client
=
(
MQTTAsync
)
context
;
MQTTAsync_connectOptions
conn_opts
=
MQTTAsync_connectOptions_initializer
;
int
rc
;
printf
(
"
\n
Connection lost
\n
"
);
printf
(
" cause: %s
\n
"
,
cause
);
printf
(
"Reconnecting
\n
"
);
conn_opts
.
keepAliveInterval
=
20
;
conn_opts
.
cleansession
=
1
;
conn_opts
.
onSuccess
=
onConnect
;
conn_opts
.
onFailure
=
onConnectFailure
;
conn_opts
.
context
=
client
;
conn_opts
.
retryInterval
=
1000
;
if
((
rc
=
MQTTAsync_connect
(
client
,
&
conn_opts
))
!=
MQTTASYNC_SUCCESS
)
{
printf
(
"Failed to start connect, return code %d
\n
"
,
rc
);
finished
=
1
;
}
}
void
handleTrace
(
enum
MQTTASYNC_TRACE_LEVELS
level
,
char
*
message
)
{
printf
(
"%s
\n
"
,
message
);
}
/**
* The main entry point of the sample.
*
* This method handles parsing the arguments specified on the
* command-line before performing the specified action.
*/
int
main
(
int
argc
,
char
**
argv
)
{
int
rc
=
0
;
int
ch
;
char
url
[
256
];
// Default settings:
int
i
=
0
;
MQTTAsync
client
;
MQTTAsync_connectOptions
conn_opts
=
MQTTAsync_connectOptions_initializer
;
MQTTAsync_message
pubmsg
=
MQTTAsync_message_initializer
;
MQTTAsync_token
token
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
signal
(
SIGINT
,
handleSignal
);
signal
(
SIGTERM
,
handleSignal
);
quietMode
=
0
;
// Parse the arguments -
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
// Check this is a valid argument
if
(
strlen
(
argv
[
i
])
==
2
&&
argv
[
i
][
0
]
==
'-'
)
{
char
arg
=
argv
[
i
][
1
];
// Handle the no-value arguments
if
(
arg
==
'h'
||
arg
==
'?'
)
{
printHelp
();
return
255
;
}
else
if
(
arg
==
'q'
)
{
quietMode
=
1
;
continue
;
}
// Validate there is a value associated with the argument
if
(
i
==
argc
-
1
||
argv
[
i
+
1
][
0
]
==
'-'
)
{
printf
(
"Missing value for argument: %s
\n
"
,
argv
[
i
]);
printHelp
();
return
255
;
}
switch
(
arg
)
{
case
'a'
:
options
.
action
=
argv
[
++
i
];
break
;
case
't'
:
options
.
topic
=
argv
[
++
i
];
break
;
case
'm'
:
options
.
message
=
argv
[
++
i
];
break
;
case
's'
:
options
.
qos
=
atoi
(
argv
[
++
i
]);
break
;
case
'c'
:
options
.
message_count
=
atoi
(
argv
[
++
i
]);
break
;
case
'b'
:
options
.
broker
=
argv
[
++
i
];
break
;
case
'p'
:
options
.
port
=
argv
[
++
i
];
break
;
default:
printf
(
"Unrecognised argument: %s
\n
"
,
argv
[
i
]);
printHelp
();
return
255
;
}
}
else
{
printf
(
"Unrecognised argument: %s
\n
"
,
argv
[
i
]);
printHelp
();
return
255
;
}
}
// Validate the provided arguments
if
(
strcmp
(
options
.
action
,
"publish"
)
!=
0
&&
strcmp
(
options
.
action
,
"subscribe"
)
!=
0
)
{
printf
(
"Invalid action: %s
\n
"
,
options
.
action
);
printHelp
();
return
255
;
}
if
(
options
.
qos
<
0
||
options
.
qos
>
2
)
{
printf
(
"Invalid QoS: %d
\n
"
,
options
.
qos
);
printHelp
();
return
255
;
}
if
(
options
.
topic
==
NULL
||
(
options
.
topic
!=
NULL
&&
strlen
(
options
.
topic
)
==
0
)
)
{
// Set the default topic according to the specified action
if
(
strcmp
(
options
.
action
,
"publish"
)
==
0
)
options
.
topic
=
"MQTTV3ASample/C/v3"
;
else
options
.
topic
=
"MQTTV3ASample/#"
;
}
// Construct the full broker URL and clientId
sprintf
(
url
,
"tcp://%s:%s"
,
options
.
broker
,
options
.
port
);
sprintf
(
clientId
,
"SampleCV3A_%s"
,
options
.
action
);
MQTTAsync_create
(
&
client
,
url
,
clientId
,
MQTTCLIENT_PERSISTENCE_NONE
,
NULL
);
MQTTAsync_setTraceCallback
(
handleTrace
);
MQTTAsync_setTraceLevel
(
MQTTASYNC_TRACE_ERROR
);
MQTTAsync_setCallbacks
(
client
,
client
,
connectionLost
,
messageArrived
,
deliveryComplete
);
conn_opts
.
cleansession
=
0
;
conn_opts
.
onSuccess
=
onConnect
;
conn_opts
.
onFailure
=
onConnectFailure
;
conn_opts
.
context
=
client
;
conn_opts
.
keepAliveInterval
=
0
;
conn_opts
.
retryInterval
=
0
;
//conn_opts.maxInflight= 30;
if
((
rc
=
MQTTAsync_connect
(
client
,
&
conn_opts
))
!=
MQTTASYNC_SUCCESS
)
{
printf
(
"Failed to start connect, return code %d
\n
"
,
rc
);
goto
exit
;
}
printf
(
"Waiting for connect
\n
"
);
while
(
connected
==
0
&&
finished
==
0
&&
toStop
==
0
)
{
printf
(
"Waiting for connect: %d %d %d
\n
"
,
connected
,
finished
,
toStop
);
Sleep
(
1
);
}
printf
(
"Waiting for connect: %d %d %d
\n
"
,
connected
,
finished
,
toStop
);
printf
(
"Successful connection
\n
"
);
if
(
connected
==
1
&&
strcmp
(
options
.
action
,
"publish"
)
==
0
)
{
unsigned
long
i
;
struct
timeval
tv
;
//gettimeofday(&tv,NULL);
//printf("start seconds : %ld\n",tv.tv_sec);
for
(
i
=
0
;
i
<
options
.
message_count
;
i
++
)
{
opts
.
onSuccess
=
onSend
;
opts
.
onFailure
=
onSendFailure
;
opts
.
context
=
client
;
pubmsg
.
payload
=
options
.
message
;
pubmsg
.
payloadlen
=
strlen
(
options
.
message
);
pubmsg
.
qos
=
options
.
qos
;
pubmsg
.
retained
=
0
;
deliveredtoken
=
0
;
Sleep
(
1
);
if
((
rc
=
MQTTAsync_sendMessage
(
client
,
options
.
topic
,
&
pubmsg
,
&
opts
))
!=
MQTTASYNC_SUCCESS
)
{
printf
(
"Failed to start sendMessage, return code %d
\n
"
,
rc
);
exit
(
-
1
);
}
}
//gettimeofday(&tv,NULL);
//printf("end seconds : %ld\n",tv.tv_sec);
}
else
if
(
strcmp
(
options
.
action
,
"subscribe"
)
==
0
)
{
opts
.
onSuccess
=
onSubscribe
;
opts
.
onFailure
=
onSubscribeFailure
;
opts
.
context
=
client
;
if
((
rc
=
MQTTAsync_subscribe
(
client
,
options
.
topic
,
options
.
qos
,
&
opts
))
!=
MQTTASYNC_SUCCESS
)
{
printf
(
"Failed to subscribe, return code %d
\n
"
,
rc
);
exit
(
-
1
);
}
}
while
(
!
finished
)
{
#if defined(WIN32)
Sleep
(
100
);
#else
usleep
(
1000L
);
#endif
if
(
toStop
==
1
)
{
MQTTAsync_disconnectOptions
opts
=
MQTTAsync_disconnectOptions_initializer
;
opts
.
onSuccess
=
onDisconnect
;
opts
.
context
=
client
;
printf
(
"Entering disconnection phase
\n
"
);
if
((
rc
=
MQTTAsync_disconnect
(
client
,
&
opts
))
!=
MQTTASYNC_SUCCESS
)
{
printf
(
"Failed to start disconnect, return code %d
\n
"
,
rc
);
exit
(
-
1
);
}
toStop
=
0
;
}
}
exit:
printf
(
"calling destroy
\n
"
);
MQTTAsync_destroy
(
&
client
);
return
rc
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment