59db48104628e7f319a02fb2c6ff0bd315c96bba
[platform/core/security/security-manager.git] / src / server / common / message-buffer.cpp
1 /*
2  *  Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *  Contact: Rafal Krypa <r.krypa@samsung.com>
5  *
6  *  Licensed under the Apache License, Version 2.0 (the "License");
7  *  you may not use this file except in compliance with the License.
8  *  You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  *  Unless required by applicable law or agreed to in writing, software
13  *  distributed under the License is distributed on an "AS IS" BASIS,
14  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *  See the License for the specific language governing permissions and
16  *  limitations under the License
17  */
18 /*
19  * @file        message-buffer.cpp
20  * @author      Bartlomiej Grzelewski (b.grzelewski@samsung.com)
21  * @version     1.0
22  * @brief       Implementation of MessageBuffer.
23  */
24
25 #include <message-buffer.h>
26
27 #include <dpl/log/log.h>
28
29 namespace SecurityManager {
30
31 void MessageBuffer::Push(const RawBuffer &data) {
32     m_buffer.AppendCopy(&data[0], data.size());
33 }
34
35 RawBuffer MessageBuffer::Pop() {
36     size_t size = m_buffer.Size();
37     RawBuffer buffer;
38     buffer.resize(size + sizeof(size_t));
39     memcpy(&buffer[0], &size, sizeof(size_t));
40     m_buffer.FlattenConsume(&buffer[sizeof(size_t)], size);
41     return buffer;
42 }
43
44 bool MessageBuffer::Ready() {
45     CountBytesLeft();
46     if (m_bytesLeft == 0)
47         return false;
48     if (m_bytesLeft > m_buffer.Size())
49         return false;
50     return true;
51 }
52
53 void MessageBuffer::Read(size_t num, void *bytes) {
54     CountBytesLeft();
55     if (num > m_bytesLeft) {
56         LogDebug("Protocol broken. OutOfData. Asked for: " << num << " Ready: " << m_bytesLeft << " Buffer.size(): " << m_buffer.Size());
57         Throw(Exception::OutOfData);
58     }
59
60     m_buffer.FlattenConsume(bytes, num);
61     m_bytesLeft -= num;
62 }
63
64 void MessageBuffer::Write(size_t num, const void *bytes) {
65     m_buffer.AppendCopy(bytes, num);
66 }
67
68 } // namespace SecurityManager
69