Shows how to write a simple client (dialer that connects to the example server using ecore_con_server_connect().
 
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
 
#include <stdio.h>
#include <Ecore.h>
#include <Ecore_Con.h>
#include <Ecore_Getopt.h>
 
 
static int retval = EXIT_SUCCESS;
static char *starttls_local_command = NULL;
 
_setup_ssl(void)
{
   const char *ca;
 
     {
        retval = EXIT_FAILURE;
     }
 
   
     {
          fprintf(stderr, "WARNING: could not load CA: %s!\n", ca);
     }
 
 
   if (verify)
 
   if (hostname_verify)
 
}
 
{
   char *line = NULL;
#ifdef _WIN32
   char lbuf[4096] = "";
   ssize_t r;
   if (fgets(lbuf, sizeof(lbuf), stdin) == NULL)
     r = -1;
   else
     {
        line = strdup(lbuf);
        r = strlen(line);
     }
#else
   size_t len = 0;
   ssize_t r = getline(&line, &len, stdin);
#endif
 
   if (r < 0)
     {
        fprintf(stderr, "ERROR: could not read from stdin: %s\n", strerror(errno));
     }
 
   if (!svr)
     fputs("WARNING: not connected to server, ignored input.\n", stderr);
   else
     {
        size_t clen = strlen(starttls_local_command);
        if (do_ssl_upgrade && ((size_t)r > clen) &&
            (strncmp(line, starttls_local_command, clen) == 0) &&
            (line[clen] == '\n' || line[clen] == '\r'))
          {
             printf("INFO: starting SSL communication...\n");
 
               {
                  printf("ERROR: failed to upgrade to SSL!\n");
                  retval = EXIT_FAILURE;
               }
 
#if 1
             
             else if (!_setup_ssl())
               {
                  retval = EXIT_FAILURE;
               }
#endif
 
             svr = NULL; 
             goto end;
          }
        printf("INFO: sent %zd bytes to server.\n", r);
        if (single_message)
          {
             svr = NULL;
          }
     }
 
 end:
   free(line);
 
}
 
{
   if (do_ssl_upgrade)
     printf("INFO: Not sending 'hello!' in tcp+ssl mode. Use: %s to upgrade the connection\n", starttls_local_command);
   else
 
}
 
{
   svr = NULL;
}
 
{
   printf("Received %i bytes from server:\n"
          ">>>>>\n"
          "%.*s\n"
          ">>>>>\n",
 
}
 
{
   printf(
"Sent %d bytes to server\n", ev->
size);
}
 
{
   printf(
"Server Error: %s\n", ev->
error);
}
 
{
}
 
static const char *types_strs[] = {
  "tcp",
  "udp",
  "ssl",
  "tcp+ssl",
  "local-user",
  "local-system",
  NULL
};
 
  "ecore_con_client_example", 
  NULL, 
  "1", 
  "(C) 2016 Enlightenment Project; 2010 Mike Blumenkrantz", 
  "BSD 2-Clause", 
  
  "Example of ecore_con_server_connect()\n",
  {
 
 
    ECORE_GETOPT_STORE_STR(
'c', 
"starttls-local-command", 
"The string to use as a local command (it's NOT sent to remote peer) to upgrade connections when -t/--type=tcp+ssl. Defaults to STARTTLS, however if you need to send that to the server, change the string with this option."),
 
 
 
 
 
  }
};
 
int
main(int argc, char *argv[])
{
   char *name = NULL;
   char *type_choice = NULL;
   Ecore_Con_Type type;
   int port = -1;
 
 
 
 
     
 
     
 
   };
   int args;
 
 
   if (args < 0)
     {
        fputs("ERROR: Could not parse command line options.\n", stderr);
        retval = EXIT_FAILURE;
        goto end;
     }
 
   if (quit_option) goto end;
 
   if (args < 0)
     {
        fputs("ERROR: Could not parse positional arguments.\n", stderr);
        retval = EXIT_FAILURE;
        goto end;
     }
 
   if (!type_choice) type_choice = "tcp";
 
   if (strcmp(type_choice, "tcp") == 0)
     type = ECORE_CON_REMOTE_TCP;
   else if (strcmp(type_choice, "udp") == 0)
     type = ECORE_CON_REMOTE_UDP;
   else if (strcmp(type_choice, "ssl") == 0)
     type = ECORE_CON_REMOTE_TCP | ECORE_CON_USE_MIXED | ECORE_CON_LOAD_CERT;
   else if (strcmp(type_choice, "tcp+ssl") == 0)
     {
        type = ECORE_CON_REMOTE_TCP;
     }
   else if (strcmp(type_choice, "local-user") == 0)
     type = ECORE_CON_LOCAL_USER;
   else if (strcmp(type_choice, "local-system") == 0)
     type = ECORE_CON_LOCAL_SYSTEM;
   else
     {
        fprintf(stderr, "ERROR: unsupported --type/-t '%s'\n", type_choice);
        retval = EXIT_FAILURE;
        goto end;
     }
 
   if ((!starttls_local_command) || (starttls_local_command[0] == '\0'))
     starttls_local_command = "STARTTLS";
 
   if (no_proxy) type |= ECORE_CON_NO_PROXY;
 
   if (!svr) goto end;
 
   if (strcmp(type_choice, "ssl") == 0)
     {
        if (!_setup_ssl())
          goto no_mainloop;
     }
 
 
 
 
 no_mainloop:
   if (svr)
     {
        svr = NULL;
     }
 
end:
 
   return retval;
}
EAPI int ECORE_CON_EVENT_SERVER_UPGRADE
A server connection has been upgraded to SSL.
Definition: ecore_con_legacy.c:164
EAPI int ECORE_CON_EVENT_SERVER_DATA
A server connection object has data.
Definition: ecore_con_legacy.c:161
EAPI int ECORE_CON_EVENT_SERVER_ADD
A server was created.
Definition: ecore_con_legacy.c:160
EAPI int ECORE_CON_EVENT_SERVER_ERROR
A server experienced an error.
Definition: ecore_con_legacy.c:155
EAPI int ECORE_CON_EVENT_SERVER_DEL
A server connection was lost.
Definition: ecore_con_legacy.c:154
EAPI int ECORE_CON_EVENT_SERVER_WRITE
A server connection object has sent data.
Definition: ecore_con_legacy.c:162
EAPI int ecore_con_shutdown(void)
Shuts down the Ecore_Con library.
Definition: ecore_con.c:133
EAPI int ecore_con_init(void)
Initializes the Ecore_Con library.
Definition: ecore_con.c:68
EAPI Eina_Bool ecore_con_ssl_server_cafile_add(Ecore_Con_Server *svr, const char *ca_file)
Adds an SSL CA file for use in ecore_con functions.
Definition: ecore_con_legacy.c:2513
EAPI void ecore_con_ssl_server_verify_basic(Ecore_Con_Server *svr)
Enables hostname-based certificate verification on a server object.
Definition: ecore_con_legacy.c:2548
EAPI void ecore_con_ssl_server_verify(Ecore_Con_Server *svr)
Enables certificate verification on a server object.
Definition: ecore_con_legacy.c:2528
EAPI Eina_Bool ecore_con_ssl_server_upgrade(Ecore_Con_Server *svr, Ecore_Con_Type ssl_type)
Upgrades a connection to a specified level of encryption.
Definition: ecore_con_legacy.c:2590
EAPI const char * ecore_con_server_ip_get(const Ecore_Con_Server *svr)
Gets the IP address of a server that has been connected to.
Definition: ecore_con_legacy.c:2398
EAPI void ecore_con_server_flush(Ecore_Con_Server *svr)
Flushes all pending data to the given server.
Definition: ecore_con_legacy.c:2412
EAPI void * ecore_con_server_del(Ecore_Con_Server *svr)
Closes the connection and free the given server.
Definition: ecore_con_legacy.c:2302
struct _Ecore_Con_Server Ecore_Con_Server
Used to provide legacy API/ABI compatibility with non-Eo applications.
Definition: Ecore_Con.h:318
EAPI Ecore_Con_Server * ecore_con_server_connect(Ecore_Con_Type type, const char *name, int port, const void *data)
Creates a connection to the specified server and return an associated object.
Definition: ecore_con_legacy.c:2165
EAPI int ecore_con_server_send(Ecore_Con_Server *svr, const void *data, int size)
Sends the given data to the given server.
Definition: ecore_con_legacy.c:2354
Eina_Bool(* Ecore_Event_Handler_Cb)(void *data, int type, void *event)
A callback used by the main loop to handle events of a specified type.
Definition: Ecore_Common.h:603
Ecore_Event_Handler * ecore_event_handler_add(int type, Ecore_Event_Handler_Cb func, const void *data)
Adds an event handler.
Definition: ecore_events.c:13
struct _Ecore_Fd_Handler Ecore_Fd_Handler
A handle for Fd handlers.
Definition: Ecore_Common.h:1380
Ecore_Fd_Handler * ecore_main_fd_handler_add(int fd, Ecore_Fd_Handler_Flags flags, Ecore_Fd_Cb func, const void *data, Ecore_Fd_Cb buf_func, const void *buf_data)
Adds a callback for activity on the given file descriptor.
Definition: ecore_main.c:1436
@ ECORE_FD_READ
Fd Read mask.
Definition: Ecore_Common.h:1388
#define ECORE_GETOPT_VALUE_NONE
Definition for options that store a NULL value.
Definition: Ecore_Getopt.h:1018
#define ECORE_GETOPT_VALUE_INT(val)
Definition for options that store a single value in a variable of type int.
Definition: Ecore_Getopt.h:955
#define ECORE_GETOPT_CHOICE(shortname, longname, help, choices_array)
Definition for filling Ecore_Getopt_Desc table with a true boolean value.
Definition: Ecore_Getopt.h:750
#define ECORE_GETOPT_VALUE_STR(val)
Definition for options that store a single value in a variable of type string.
Definition: Ecore_Getopt.h:934
#define ECORE_GETOPT_STORE_METAVAR_INT(shortname, longname, help, metavar)
Definition for filling Ecore_Getopt_Desc table with an option of type int and metavar.
Definition: Ecore_Getopt.h:381
#define ECORE_GETOPT_STORE_METAVAR_STR(shortname, longname, help, metavar)
Definition for filling Ecore_Getopt_Desc table with an option of type string and metavar.
Definition: Ecore_Getopt.h:348
#define ECORE_GETOPT_LICENSE(shortname, longname)
Definition for filling Ecore_Getopt_Desc table with a license action.
Definition: Ecore_Getopt.h:892
#define ECORE_GETOPT_VALUE_BOOL(val)
Definition for options that store a single value in a variable of type boolean.
Definition: Ecore_Getopt.h:941
#define ECORE_GETOPT_VERSION(shortname, longname)
Definition for filling Ecore_Getopt_Desc table with a version action.
Definition: Ecore_Getopt.h:870
EAPI int ecore_getopt_parse_positional(const Ecore_Getopt *parser, Ecore_Getopt_Value *values, int argc, char **argv, int start)
Parses command line positional parameters.
Definition: ecore_getopt.c:2096
EAPI int ecore_getopt_parse(const Ecore_Getopt *parser, Ecore_Getopt_Value *values, int argc, char **argv)
Parses command line parameters.
Definition: ecore_getopt.c:2032
#define ECORE_GETOPT_COPYRIGHT(shortname, longname)
Definition for filling Ecore_Getopt_Desc table with a copyright action.
Definition: Ecore_Getopt.h:881
#define ECORE_GETOPT_STORE_TRUE(shortname, longname, help)
Definition for filling Ecore_Getopt_Desc table with a true boolean value.
Definition: Ecore_Getopt.h:727
#define ECORE_GETOPT_HELP(shortname, longname)
Definition for filling Ecore_Getopt_Desc table with a help action.
Definition: Ecore_Getopt.h:859
#define ECORE_GETOPT_STORE_FALSE(shortname, longname, help)
Definition for filling Ecore_Getopt_Desc table with a false boolean value.
Definition: Ecore_Getopt.h:738
#define ECORE_GETOPT_STORE_STR(shortname, longname, help)
Definition for macro that fill Ecore_Getopt_Desc table with an option of type string.
Definition: Ecore_Getopt.h:249
#define ECORE_GETOPT_SENTINEL
Definition for filling Ecore_Getopt_Desc table with a sentinel to indicate the end of descriptions.
Definition: Ecore_Getopt.h:927
EAPI int ecore_shutdown(void)
Shuts down connections, signal handlers sockets etc.
Definition: ecore.c:366
EAPI int ecore_init(void)
Sets up connections, signal handlers, sockets etc.
Definition: ecore.c:225
#define ECORE_CALLBACK_RENEW
Return value to keep a callback.
Definition: Ecore_Common.h:153
void ecore_main_loop_quit(void)
Quits the main loop once all the events currently on the queue have been processed.
Definition: ecore_main.c:1308
#define ECORE_CALLBACK_CANCEL
Return value to remove a callback.
Definition: Ecore_Common.h:152
void ecore_main_loop_begin(void)
Runs the application main loop.
Definition: ecore_main.c:1298
Eina_Iterator * eina_file_ls(const char *dir)
Gets an iterator to list the content of a directory.
Definition: eina_file.c:631
#define EINA_ITERATOR_FOREACH(itr, data)
Definition for the macro to iterate over all elements easily.
Definition: eina_iterator.h:448
void eina_iterator_free(Eina_Iterator *iterator)
Frees an iterator.
Definition: eina_iterator.c:98
int eina_shutdown(void)
Shuts down the Eina library.
Definition: eina_main.c:350
int eina_init(void)
Initializes the Eina library.
Definition: eina_main.c:279
void eina_stringshare_del(Eina_Stringshare *str)
Notes that the given string has lost an instance.
Definition: eina_stringshare.c:533
#define EINA_TRUE
boolean value TRUE (numerical value 1)
Definition: eina_types.h:539
#define EINA_FALSE
boolean value FALSE (numerical value 0)
Definition: eina_types.h:533
unsigned char Eina_Bool
Type to mimic a boolean.
Definition: eina_types.h:527
#define EINA_UNUSED
Used to indicate that a function parameter is purposely unused.
Definition: eina_types.h:339
Used as the data param for the ECORE_CON_EVENT_SERVER_ADD event.
Definition: Ecore_Con.h:504
Ecore_Con_Server * server
the server that was connected to
Definition: Ecore_Con.h:505
Used as the data param for the ECORE_CON_EVENT_SERVER_DATA event.
Definition: Ecore_Con.h:553
int size
the length of the data sent
Definition: Ecore_Con.h:556
void * data
the data that the server sent
Definition: Ecore_Con.h:555
Used as the data param for the ECORE_CON_EVENT_SERVER_DEL event.
Definition: Ecore_Con.h:523
Ecore_Con_Server * server
the client that was lost
Definition: Ecore_Con.h:524
Used as the data param for the ECORE_CON_EVENT_SERVER_ERROR event.
Definition: Ecore_Con.h:532
char * error
the error string describing what happened
Definition: Ecore_Con.h:534
Used as the data param for the ECORE_CON_EVENT_SERVER_UPGRADE event.
Definition: Ecore_Con.h:514
Ecore_Con_Server * server
the server that was connected to
Definition: Ecore_Con.h:515
Used as the data param for the ECORE_CON_EVENT_SERVER_WRITE event.
Definition: Ecore_Con.h:574
int size
the length of the data sent
Definition: Ecore_Con.h:576
Structure that contains information on all command line options.
Definition: Ecore_Getopt.h:212
structure of an iterator
Definition: eina_iterator.h:159
Union listing the types of parameters that can take Getopt values.
Definition: Ecore_Getopt.h:130