aboutsummaryrefslogtreecommitdiffstats
path: root/src/starter/starterstroke.c
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2014-02-20 16:17:11 +0100
committerTobias Brunner <tobias@strongswan.org>2014-06-19 13:56:37 +0200
commit02de66e1bf8c1d8b30a4a229c0c7b4184ce85c41 (patch)
treec136f8dbdc0a5a9e42a874c5e7ab9a665d4def9b /src/starter/starterstroke.c
parent906a409608f8aee5e477795dc76e05f4c2b5e387 (diff)
downloadstrongswan-02de66e1bf8c1d8b30a4a229c0c7b4184ce85c41.tar.bz2
strongswan-02de66e1bf8c1d8b30a4a229c0c7b4184ce85c41.tar.xz
starter: Use stream abstraction to communicate with stroke plugin
Diffstat (limited to 'src/starter/starterstroke.c')
-rw-r--r--src/starter/starterstroke.c49
1 files changed, 16 insertions, 33 deletions
diff --git a/src/starter/starterstroke.c b/src/starter/starterstroke.c
index 839e66e7b..1e305db8b 100644
--- a/src/starter/starterstroke.c
+++ b/src/starter/starterstroke.c
@@ -13,16 +13,9 @@
* for more details.
*/
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <stddef.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
-#include <errno.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
#include <credentials/auth_cfg.h>
@@ -56,48 +49,38 @@ static char* push_string(stroke_msg_t *msg, char *string)
static int send_stroke_msg (stroke_msg_t *msg)
{
- struct sockaddr_un ctl_addr;
- int byte_count;
- char buffer[64];
-
- ctl_addr.sun_family = AF_UNIX;
- strcpy(ctl_addr.sun_path, CHARON_CTL_FILE);
+ stream_t *stream;
+ char *uri, buffer[64];
+ int count;
/* starter is not called from commandline, and therefore absolutely silent */
msg->output_verbosity = -1;
- int sock = socket(AF_UNIX, SOCK_STREAM, 0);
-
- if (sock < 0)
- {
- DBG1(DBG_APP, "socket() failed: %s", strerror(errno));
- return -1;
- }
- if (connect(sock, (struct sockaddr *)&ctl_addr, offsetof(struct sockaddr_un, sun_path) + strlen(ctl_addr.sun_path)) < 0)
+ uri = lib->settings->get_str(lib->settings, "%s.plugins.stroke.socket",
+ "unix://" CHARON_CTL_FILE, daemon_name);
+ stream = lib->streams->connect(lib->streams, uri);
+ if (!stream)
{
- DBG1(DBG_APP, "connect(charon_ctl) failed: %s", strerror(errno));
- close(sock);
+ DBG1(DBG_APP, "failed to connect to stroke socket '%s'", uri);
return -1;
}
- /* send message */
- if (write(sock, msg, msg->length) != msg->length)
+ if (!stream->write_all(stream, msg, msg->length))
{
- DBG1(DBG_APP, "write(charon_ctl) failed: %s", strerror(errno));
- close(sock);
+ DBG1(DBG_APP, "sending stroke message failed");
+ stream->destroy(stream);
return -1;
}
- while ((byte_count = read(sock, buffer, sizeof(buffer)-1)) > 0)
+ while ((count = stream->read(stream, buffer, sizeof(buffer)-1, TRUE)) > 0)
{
- buffer[byte_count] = '\0';
+ buffer[count] = '\0';
DBG1(DBG_APP, "%s", buffer);
}
- if (byte_count < 0)
+ if (count < 0)
{
- DBG1(DBG_APP, "read() failed: %s", strerror(errno));
+ DBG1(DBG_APP, "reading stroke response failed");
}
-
- close(sock);
+ stream->destroy(stream);
return 0;
}