+++ /dev/null
-/* Application Node */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include "notaio.h"
-#include "pdu.h" /* defines the test string (TESTSTRING)
- * and Service ID (DEFAULT_SID) to use.
- */
-
-char* get_image(int* len) {
- const char* IMG_PATH= "img/%02d.jpg";
- const int IMG_CNT = 3;
- static int img_idx = 0;
-
- char path[256];
- FILE* img_file;
- int img_size;
- char* img_buf = 0;
- int rl;
-
- sprintf(path,IMG_PATH,img_idx);
- printf("Sending image %s\n",path);
-
- img_file = fopen(path,"r");
- if (!img_file) {
- printf("get_image: ERROR opening image\n");
- return NULL;
- }
-
- fseek(img_file,0,SEEK_END);
- img_size = ftell(img_file);
- fseek(img_file,0,SEEK_SET);
- printf("Image size %d\n",img_size);
-
- img_buf = malloc(img_size);
- rl=fread(img_buf,1,img_size,img_file);
-
- if (rl!=img_size) {
- printf("get_image: ERROR reading image\n");
- free(img_buf);
- img_buf = 0;
- }
- img_idx = (img_idx+1) % IMG_CNT;
-
- if(len) *len = img_size;
-
- return img_buf;
-}
-
-int main(int argc, char* argv[])
-{
- /* Service socket to use for connecting to the service node. */
- HSSockID sockid;
- HErrorCode err;
-
-/* The first parameter specifies the service to connect to (SID).
- * The other parameters are reserved for legacy purposes.
- */
- sockid = n_connect(DEFAULT_SID, NULL, NULL);
-
-/* sockid will be the number of the socket we got (>0), if successful,
- * or <0 if something went wrong. Let's check:
- */
- if (sockid < 0) {
- return -1;
- }
-
- printf("Connected socket %d to service '%d'.\n", sockid, DEFAULT_SID);
-
- while(1) {
- int img_len = 0;
- char* img;
- int len = 0;
- ServiceMessage* smsg;
-
- img = get_image(&img_len);
- if(img) {
- smsg = pack_pdu(PUT_IMAGE, (uns8*)img, img_len, &len);
- free(img);
-
- /* Send the through the socket specified by sockid. The last parameter,
- * HSSendBlocking, means we will
- * use blocking mode, i.e. the call to Hsend will only return once all
- * data has been sent (or an error is detected).
- */
- err = n_send(sockid, smsg, len, HSSendBlocking);
- free(smsg);
- if(err < 0){
- return -1;
- }
-
- /* If no error condition was raised, Hsend will return the
- * number of bytes sent. Let's check this against what we
- * intended to send, just to be sure (with a blocking call, the
- * return value should always be equal to the "data_len" parameter
- * of Hsend).
- */
- if (err == len)
- printf("Send successful.\n");
- else
- printf("Sent %d out of %d bytes.\n", err, len);
-
- printf("Would you like to disconnect (\"y\" for yes)?\n");
- char c = getchar();
- if (c == 'y') {
- // We're done; tell the server to close the connection.
- len = 0;
- smsg = pack_pdu (DISCONNECT,NULL, 0, &len);
- n_send(sockid, smsg, len, HSSendBlocking);
- free(smsg);
-
- if(err < 0) {
- return -1;
- }
- break;
- }
- }
- }
-
- n_disconnect(sockid);
-
- return 0;
-}
-