summaryrefslogtreecommitdiff
path: root/implementation/endpoints/src/local_client_endpoint_impl.cpp
blob: 9740104f54ee9afede2f1410407b75772dc43f9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// Copyright (C) 2014 BMW Group
// Author: Lutz Bichler (lutz.bichler@bmw.de)
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

#include <iomanip>
#include <sstream>

#include <boost/asio/write.hpp>

#include <vsomeip/defines.hpp>
#include <vsomeip/logger.hpp>

#include "../include/endpoint_host.hpp"
#include "../include/local_client_endpoint_impl.hpp"

namespace vsomeip {

local_client_endpoint_impl::local_client_endpoint_impl(
		std::shared_ptr< endpoint_host > _host, endpoint_type _remote, boost::asio::io_service &_io)
	: local_client_endpoint_base_impl(_host, _remote, _io) {
	is_supporting_magic_cookies_ = false;
}

void local_client_endpoint_impl::start() {
	connect();
}

void local_client_endpoint_impl::connect() {
	socket_.open(remote_.protocol());

	socket_.async_connect(
		remote_,
		std::bind(
			&local_client_endpoint_base_impl::connect_cbk,
			shared_from_this(),
			std::placeholders::_1
		)
	);
}

void local_client_endpoint_impl::receive() {
	packet_buffer_ptr_t its_buffer
		= std::make_shared< packet_buffer_t >();
	socket_.async_receive(
		boost::asio::buffer(*its_buffer),
		std::bind(
			&local_client_endpoint_impl::receive_cbk,
			std::dynamic_pointer_cast< local_client_endpoint_impl >(shared_from_this()),
			its_buffer,
			std::placeholders::_1,
			std::placeholders::_2
		)
	);
}

void local_client_endpoint_impl::send_queued(message_buffer_ptr_t _buffer) {
#if 0
	std::stringstream msg;
	msg << "lce<" << this << ">::sq: ";
	for (std::size_t i = 0; i < _buffer->size(); i++)
		msg << std::setw(2) << std::setfill('0') << std::hex << (int)(*_buffer)[i] << " ";
	VSOMEIP_DEBUG << msg.str();
#endif

	static byte_t its_start_tag[] = { 0x67, 0x37, 0x6D, 0x07 };
	static byte_t its_end_tag[] = { 0x07, 0x6D, 0x37, 0x67 };

	boost::asio::async_write(
		socket_,
		boost::asio::buffer(
			its_start_tag,
			sizeof(its_start_tag)
		),
		std::bind(
			&local_client_endpoint_impl::send_tag_cbk,
			std::dynamic_pointer_cast< local_client_endpoint_impl >(shared_from_this()),
			std::placeholders::_1,
			std::placeholders::_2
		)
	);

	boost::asio::async_write(
		socket_,
		boost::asio::buffer(*_buffer),
		std::bind(
			&client_endpoint_impl::send_cbk,
			this->shared_from_this(),
			_buffer,
			std::placeholders::_1,
			std::placeholders::_2
		)
	);

	boost::asio::async_write(
		socket_,
		boost::asio::buffer(
			its_end_tag,
			sizeof(its_end_tag)
		),
		std::bind(
			&local_client_endpoint_impl::send_tag_cbk,
			std::dynamic_pointer_cast< local_client_endpoint_impl >(shared_from_this()),
			std::placeholders::_1,
			std::placeholders::_2
		)
	);
}

void local_client_endpoint_impl::send_magic_cookie() {
}

void local_client_endpoint_impl::send_tag_cbk(
		boost::system::error_code const &_error, std::size_t _bytes) {
}

void local_client_endpoint_impl::receive_cbk(
		packet_buffer_ptr_t _buffer,
		boost::system::error_code const &_error, std::size_t _bytes) {
	VSOMEIP_ERROR << "Local endpoint received message (" << _error.message() << ")";
}

} // namespace vsomeip