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_device_prop_value_data.h"
22 #include "payload_data/get_num_objects_data.h"
23 #include "payload_data/get_object_data.h"
24 #include "payload_data/get_object_handles_data.h"
25 #include "payload_data/get_object_info_data.h"
26 #include "payload_data/get_object_prop_desc_data.h"
27 #include "payload_data/get_object_prop_list_data.h"
28 #include "payload_data/get_object_prop_value_data.h"
29 #include "payload_data/get_object_props_supported_data.h"
30 #include "payload_data/get_object_references_data.h"
31 #include "payload_data/get_partial_object_data.h"
32 #include "payload_data/get_storage_ids_data.h"
33 #include "payload_data/get_storage_info_data.h"
34 #include "payload_data/get_thumb_data.h"
35 #include "payload_data/move_object_data.h"
36 #include "payload_data/open_session_data.h"
37 #include "payload_data/send_object_data.h"
38 #include "payload_data/send_object_info_data.h"
39 #include "payload_data/set_device_prop_value_data.h"
40 #include "payload_data/set_object_prop_value_data.h"
41 #include "payload_data/set_object_references_data.h"
42
43 using namespace std;
44 namespace OHOS {
45 namespace Media {
PacketPayloadFactory()46 PacketPayloadFactory::PacketPayloadFactory()
47 {
48 }
49
~PacketPayloadFactory()50 PacketPayloadFactory::~PacketPayloadFactory()
51 {
52 }
53
CreatePayload(std::shared_ptr<MtpOperationContext> & context,const uint16_t code,const uint16_t stage)54 std::shared_ptr<PayloadData> PacketPayloadFactory::CreatePayload(std::shared_ptr<MtpOperationContext> &context,
55 const uint16_t code, const uint16_t stage)
56 {
57 shared_ptr<PayloadData> payloadData;
58 switch (code) {
59 case MTP_OPERATION_GET_DEVICE_INFO_CODE:
60 payloadData = make_shared<GetDeviceInfoData>(context);
61 break;
62 case MTP_OPERATION_OPEN_SESSION_CODE:
63 payloadData = make_shared<OpenSessionData>(context);
64 break;
65 case MTP_OPERATION_RESET_DEVICE_CODE:
66 case MTP_OPERATION_CLOSE_SESSION_CODE:
67 payloadData = make_shared<CloseSessionData>(context);
68 break;
69 case MTP_OPERATION_GET_OBJECT_PROPS_SUPPORTED_CODE:
70 payloadData = make_shared<GetObjectPropsSupportedData>(context);
71 break;
72 case MTP_OPERATION_GET_OBJECT_HANDLES_CODE:
73 payloadData = make_shared<GetObjectHandlesData>(context);
74 break;
75 case MTP_OPERATION_GET_NUM_OBJECTS_CODE:
76 payloadData = make_shared<GetNumObjectsData>(context);
77 break;
78 case MTP_OPERATION_GET_OBJECT_INFO_CODE:
79 payloadData = make_shared<GetObjectInfoData>(context);
80 break;
81 case MTP_OPERATION_GET_OBJECT_PROP_DESC_CODE:
82 payloadData = make_shared<GetObjectPropDescData>(context);
83 break;
84 case MTP_OPERATION_GET_OBJECT_PROP_VALUE_CODE:
85 payloadData = make_shared<GetObjectPropValueData>(context);
86 break;
87 case MTP_OPERATION_SET_OBJECT_PROP_VALUE_CODE:
88 payloadData = make_shared<SetObjectPropValueData>(context);
89 break;
90 case MTP_OPERATION_GET_OBJECT_PROP_LIST_CODE:
91 payloadData = make_shared<GetObjectPropListData>(context);
92 break;
93 case MTP_OPERATION_GET_OBJECT_REFERENCES_CODE:
94 payloadData = make_shared<GetObjectReferencesData>(context);
95 break;
96 case MTP_OPERATION_SET_OBJECT_REFERENCES_CODE:
97 payloadData = make_shared<SetObjectReferencesData>(context);
98 break;
99 case MTP_OPERATION_DELETE_OBJECT_CODE:
100 payloadData = make_shared<DeleteObjectData>(context);
101 break;
102 default:
103 payloadData = CreatePayloadMore(context, code, stage);
104 break;
105 }
106 return payloadData;
107 }
108
CreatePayloadMore(std::shared_ptr<MtpOperationContext> & context,const uint16_t code,const uint16_t stage)109 std::shared_ptr<PayloadData> PacketPayloadFactory::CreatePayloadMore(std::shared_ptr<MtpOperationContext> &context,
110 const uint16_t code, const uint16_t stage)
111 {
112 shared_ptr<PayloadData> payloadData;
113 switch (code) {
114 case MTP_OPERATION_MOVE_OBJECT_CODE:
115 payloadData = make_shared<MoveObjectData>(context);
116 break;
117 case MTP_OPERATION_COPY_OBJECT_CODE:
118 payloadData = make_shared<CopyObjectData>(context);
119 break;
120 case MTP_OPERATION_GET_OBJECT_CODE:
121 payloadData = make_shared<GetObjectData>(context);
122 break;
123 case MTP_OPERATION_SEND_OBJECT_CODE:
124 payloadData = make_shared<SendObjectData>(context);
125 break;
126 case MTP_OPERATION_GET_THUMB_CODE:
127 payloadData = make_shared<GetThumbData>(context);
128 break;
129 case MTP_OPERATION_SEND_OBJECT_INFO_CODE:
130 payloadData = make_shared<SendObjectInfoData>(context);
131 break;
132 case MTP_OPERATION_GET_PARTIAL_OBJECT_CODE:
133 payloadData = make_shared<GetPartialObjectData>(context);
134 break;
135 case MTP_OPERATION_GET_STORAGE_IDS_CODE:
136 payloadData = make_shared<GetStorageIdsData>(context);
137 break;
138 case MTP_OPERATION_GET_STORAGE_INFO_CODE:
139 payloadData = make_shared<GetStorageInfoData>(context);
140 break;
141 case MTP_OPERATION_GET_DEVICE_PROP_DESC_CODE: // 0x1004 device_prop_desc
142 payloadData = make_shared<GetDevicePropDescData>(context);
143 break;
144 case MTP_OPERATION_GET_DEVICE_PROP_VALUE_CODE:
145 payloadData = make_shared<GetDevicePropValueData>(context);
146 break;
147 case MTP_OPERATION_SET_DEVICE_PROP_VALUE_CODE:
148 payloadData = make_shared<SetDevicePropValueData>(context);
149 break;
150 default:
151 break;
152 }
153 return payloadData;
154 }
155 } // namespace Media
156 } // namespace OHOS