1 /*
2  * Copyright (C) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "packet_payload_factory.h"
16 #include "payload_data/close_session_data.h"
17 #include "payload_data/copy_object_data.h"
18 #include "payload_data/delete_object_data.h"
19 #include "payload_data/get_device_info_data.h"
20 #include "payload_data/get_device_prop_desc_data.h"
21 #include "payload_data/get_num_objects_data.h"
22 #include "payload_data/get_object_data.h"
23 #include "payload_data/get_object_handles_data.h"
24 #include "payload_data/get_object_info_data.h"
25 #include "payload_data/get_object_prop_desc_data.h"
26 #include "payload_data/get_object_prop_list_data.h"
27 #include "payload_data/get_object_prop_value_data.h"
28 #include "payload_data/get_object_props_supported_data.h"
29 #include "payload_data/get_object_references_data.h"
30 #include "payload_data/get_partial_object_data.h"
31 #include "payload_data/get_storage_ids_data.h"
32 #include "payload_data/get_storage_info_data.h"
33 #include "payload_data/get_thumb_data.h"
34 #include "payload_data/move_object_data.h"
35 #include "payload_data/open_session_data.h"
36 #include "payload_data/send_object_data.h"
37 #include "payload_data/send_object_info_data.h"
38 #include "payload_data/set_device_prop_value_data.h"
39 #include "payload_data/set_object_prop_value_data.h"
40 #include "payload_data/set_object_references_data.h"
41 
42 using namespace std;
43 namespace OHOS {
44 namespace Media {
PacketPayloadFactory()45 PacketPayloadFactory::PacketPayloadFactory()
46 {
47 }
48 
~PacketPayloadFactory()49 PacketPayloadFactory::~PacketPayloadFactory()
50 {
51 }
52 
CreatePayload(std::shared_ptr<MtpOperationContext> & context,const uint16_t code,const uint16_t stage)53 std::shared_ptr<PayloadData> PacketPayloadFactory::CreatePayload(std::shared_ptr<MtpOperationContext> &context,
54     const uint16_t code, const uint16_t stage)
55 {
56     shared_ptr<PayloadData> payloadData;
57     switch (code) {
58         case MTP_OPERATION_GET_DEVICE_INFO_CODE:
59             payloadData = make_shared<GetDeviceInfoData>(context);
60             break;
61         case MTP_OPERATION_OPEN_SESSION_CODE:
62             payloadData = make_shared<OpenSessionData>(context);
63             break;
64         case MTP_OPERATION_RESET_DEVICE_CODE:
65         case MTP_OPERATION_CLOSE_SESSION_CODE:
66             payloadData = make_shared<CloseSessionData>(context);
67             break;
68         case MTP_OPERATION_GET_OBJECT_PROPS_SUPPORTED_CODE:
69             payloadData = make_shared<GetObjectPropsSupportedData>(context);
70             break;
71         case MTP_OPERATION_GET_OBJECT_HANDLES_CODE:
72             payloadData = make_shared<GetObjectHandlesData>(context);
73             break;
74         case MTP_OPERATION_GET_NUM_OBJECTS_CODE:
75             payloadData = make_shared<GetNumObjectsData>(context);
76             break;
77         case MTP_OPERATION_GET_OBJECT_INFO_CODE:
78             payloadData = make_shared<GetObjectInfoData>(context);
79             break;
80         case MTP_OPERATION_GET_OBJECT_PROP_DESC_CODE:
81             payloadData = make_shared<GetObjectPropDescData>(context);
82             break;
83         case MTP_OPERATION_GET_OBJECT_PROP_VALUE_CODE:
84             payloadData = make_shared<GetObjectPropValueData>(context);
85             break;
86         case MTP_OPERATION_SET_OBJECT_PROP_VALUE_CODE:
87             payloadData = make_shared<SetObjectPropValueData>(context);
88             break;
89         case MTP_OPERATION_GET_OBJECT_PROP_LIST_CODE:
90             payloadData = make_shared<GetObjectPropListData>(context);
91             break;
92         case MTP_OPERATION_GET_OBJECT_REFERENCES_CODE:
93             payloadData = make_shared<GetObjectReferencesData>(context);
94             break;
95         case MTP_OPERATION_SET_OBJECT_REFERENCES_CODE:
96             payloadData = make_shared<SetObjectReferencesData>(context);
97             break;
98         case MTP_OPERATION_DELETE_OBJECT_CODE:
99             payloadData = make_shared<DeleteObjectData>(context);
100             break;
101         default:
102             payloadData = CreatePayloadMore(context, code, stage);
103             break;
104     }
105     return payloadData;
106 }
107 
CreatePayloadMore(std::shared_ptr<MtpOperationContext> & context,const uint16_t code,const uint16_t stage)108 std::shared_ptr<PayloadData> PacketPayloadFactory::CreatePayloadMore(std::shared_ptr<MtpOperationContext> &context,
109     const uint16_t code, const uint16_t stage)
110 {
111     shared_ptr<PayloadData> payloadData;
112     switch (code) {
113         case MTP_OPERATION_MOVE_OBJECT_CODE:
114             payloadData = make_shared<MoveObjectData>(context);
115             break;
116         case MTP_OPERATION_COPY_OBJECT_CODE:
117             payloadData = make_shared<CopyObjectData>(context);
118             break;
119         case MTP_OPERATION_GET_OBJECT_CODE:
120             payloadData = make_shared<GetObjectData>(context);
121             break;
122         case MTP_OPERATION_SEND_OBJECT_CODE:
123             payloadData = make_shared<SendObjectData>(context);
124             break;
125         case MTP_OPERATION_GET_THUMB_CODE:
126             payloadData = make_shared<GetThumbData>(context);
127             break;
128         case MTP_OPERATION_SEND_OBJECT_INFO_CODE:
129             payloadData = make_shared<SendObjectInfoData>(context);
130             break;
131         case MTP_OPERATION_GET_PARTIAL_OBJECT_CODE:
132             payloadData = make_shared<GetPartialObjectData>(context);
133             break;
134         case MTP_OPERATION_GET_STORAGE_IDS_CODE:
135             payloadData = make_shared<GetStorageIdsData>(context);
136             break;
137         case MTP_OPERATION_GET_STORAGE_INFO_CODE:
138             payloadData = make_shared<GetStorageInfoData>(context);
139             break;
140         case MTP_OPERATION_GET_DEVICE_PROP_DESC_CODE: // 0x1004 device_prop_desc
141             payloadData = make_shared<GetDevicePropDescData>(context);
142             break;
143         case MTP_OPERATION_SET_DEVICE_PROP_VALUE_CODE:
144             payloadData = make_shared<SetDevicePropValueData>(context);
145             break;
146         default:
147             break;
148     }
149     return payloadData;
150 }
151 } // namespace Media
152 } // namespace OHOS