#include "pkg_request.hh"
+#include "utils/logging.hh"
+
+#include "pkgmgrinfo_debug.h"
+
namespace pkgmgr_server {
+PkgRequest::PkgRequest()
+ : request_type_(pkgmgr_common::REQ_TYPE_NONE), data_size_(-1),
+ privilege_checked_(false) {}
+
PkgRequest::PkgRequest(int fd)
- : fd_(fd) {}
+ : request_type_(pkgmgr_common::REQ_TYPE_NONE), data_size_(-1),
+ privilege_checked_(false) {
+ socket_ = std::unique_ptr<pkgmgr_common::socket::DataSocket>(
+ new (std::nothrow) pkgmgr_common::socket::DataSocket(fd));
+ if (socket_ == nullptr)
+ LOG(ERROR) << "Out of memory";
+}
+
+PkgRequest::~PkgRequest() {
+ if (data_ != nullptr)
+ delete[] data_;
+}
+
+const unsigned char* PkgRequest::GetData() {
+ return data_;
+}
+
+int PkgRequest::GetSize() {
+ return data_size_;
+}
+
+int PkgRequest::GetFd() {
+ return socket_->GetFd();
+}
+
+pid_t PkgRequest::GetSenderPID() {
+ return socket_->GetPID();
+}
+
+uid_t PkgRequest::GetSenderUID() {
+ return socket_->GetUID();
+}
+
+pkgmgr_common::ReqType PkgRequest::GetRequestType() {
+ return request_type_;
+}
+
+bool PkgRequest::ReceiveData() {
+ int ret = socket_->ReceiveData(&request_type_, sizeof(request_type_));
+ if (ret < 0 || request_type_ == pkgmgr_common::REQ_TYPE_NONE) {
+ LOG(ERROR) << "Failed to ReceiveData";
+ return false;
+ }
+ ret = socket_->ReceiveData(&data_size_, sizeof(data_size_));
+ if (ret < 0) {
+ LOG(ERROR) << "Failed to ReceiveData";
+ request_type_ = pkgmgr_common::REQ_TYPE_NONE;
+ return false;
+ }
+ if (data_size_ <= 0) {
+ LOG(ERROR) << "Invalid data";
+ request_type_ = pkgmgr_common::REQ_TYPE_NONE;
+ return false;
+ }
+
+ data_ = new (std::nothrow) unsigned char[data_size_];
+ if (data_ == nullptr) {
+ LOG(ERROR) << "Out of memory";
+ request_type_ = pkgmgr_common::REQ_TYPE_NONE;
+ return false;
+ }
+ ret = socket_->ReceiveData(reinterpret_cast<void*>(data_), data_size_);
+ if (ret < 0) {
+ LOG(ERROR) << "Failed to ReceiveData";
+ delete[] data_;
+ data_ = nullptr;
+ request_type_ = pkgmgr_common::REQ_TYPE_NONE;
+ return false;
+ }
+
+ return true;
+}
+
+bool PkgRequest::SendData(unsigned char* data, int size) {
+ if (socket_->SendData(&size, sizeof(size)) < 0)
+ return false;
-char* PkgRequest::GetData() { return nullptr; }
+ return (socket_->SendData(data, size) == 0);
+}
-bool PkgRequest::ReceiveData() { return true; }
+bool PkgRequest::GetPrivilegeChecked() {
+ return privilege_checked_;
+}
-bool PkgRequest::SendData(char* data) { return true; }
+void PkgRequest::SetPrivilegeChecked(bool checked) {
+ privilege_checked_ = checked;
+}
} // namespace pkgmgr_server