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