File indexing completed on 2024-05-12 16:25:01

0001 /*
0002  * SPDX-FileCopyrightText: 2014 YANG Qiao <yangqiao0505@me.com>
0003  *                         2020 Weixuan Xiao <veyx.shaw@gmail.com>
0004  *                         2021 Lucas Wang <lucas.wang@tuta.io>
0005  *
0006  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0007  */
0008 
0009 // Original header below:
0010 //Copyright 27/4/14  YANG Qiao yangqiao0505@me.com
0011 //kdeconnect is distributed under two licenses.
0012 //
0013 //* The Mozilla Public License (MPL) v2.0
0014 //
0015 //or
0016 //
0017 //* The General Public License (GPL) v2.1
0018 //
0019 //----------------------------------------------------------------------
0020 //
0021 //Software distributed under these licenses is distributed on an "AS
0022 //IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
0023 //implied. See the License for the specific language governing rights
0024 //and limitations under the License.
0025 //kdeconnect is distributed under both the GPL and the MPL. The MPL
0026 //notice, reproduced below, covers the use of either of the licenses.
0027 //
0028 //---------------------------------------------------------------------
0029 
0030 #import <Foundation/Foundation.h>
0031 
0032 #pragma mark Package related macro
0033 
0034 #define UDPBROADCAST_TAG        -3
0035 #define TCPSERVER_TAG           -2
0036 
0037 #define PACKAGE_TAG_PAYLOAD     -1
0038 #define PACKAGE_TAG_NORMAL      0
0039 #define PACKAGE_TAG_IDENTITY    1
0040 #define PACKAGE_TAG_ENCRYPTED   2
0041 #define PACKAGE_TAG_PAIR        3
0042 #define PACKAGE_TAG_UNPAIR      4
0043 #define PACKAGE_TAG_PING        5
0044 #define PACKAGE_TAG_MPRIS       6
0045 #define PACKAGE_TAG_SHARE       7
0046 #define PACKAGE_TAG_CLIPBOARD   8
0047 #define PACKAGE_TAG_MOUSEPAD    9
0048 #define PACKAGE_TAG_BATTERY     10
0049 #define PACKAGE_TAG_CALENDAR    11
0050 // #define PACKAGE_TAG_REMINDER    12
0051 #define PACKAGE_TAG_CONTACT     13 
0052 
0053 #define UDP_PORT                1716
0054 #define PORT                    1716    /* Fallback */
0055 #define MIN_TCP_PORT            1716
0056 #define MAX_TCP_PORT            1764
0057 #define ProtocolVersion         7
0058 
0059 #pragma mark - Package Types
0060 
0061 NS_ASSUME_NONNULL_BEGIN
0062 
0063 typedef NSString *NetworkPackageType NS_TYPED_ENUM NS_SWIFT_NAME(NetworkPackage.Type);
0064 
0065 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeIdentity;
0066 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeEncrypted;
0067 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypePair;
0068 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypePing;
0069 
0070 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeMPRIS;
0071 
0072 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeShare;
0073 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeShareRequestUpdate;
0074 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeShareInternal;
0075 
0076 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeClipboard;
0077 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeClipboardConnect;
0078 
0079 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeBattery;
0080 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeCalendar;
0081 // FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeReminder;
0082 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeContact;
0083 
0084 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeBatteryRequest;
0085 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeFindMyPhoneRequest;
0086 
0087 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeMousePadRequest;
0088 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeMousePadKeyboardState;
0089 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeMousePadEcho;
0090 
0091 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypePresenter;
0092 
0093 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeRunCommandRequest;
0094 FOUNDATION_EXPORT NetworkPackageType const NetworkPackageTypeRunCommand;
0095 
0096 #pragma mark -
0097 
0098 @interface NetworkPackage : NSObject
0099 
0100 @property(nonatomic) NSNumber *_Id;
0101 @property(nonatomic) NetworkPackageType type;
0102 @property(nonatomic) NSMutableDictionary<NSString *, id> *_Body;
0103 @property(nonatomic, nullable) NSURL *payloadPath;
0104 @property(nonatomic, nullable) NSDictionary<NSString *, id> *payloadTransferInfo;
0105 @property(nonatomic) long _PayloadSize;
0106 
0107 - (NetworkPackage *) initWithType:(NetworkPackageType)type;
0108 + (NetworkPackage *)createIdentityPackageWithTCPPort:(uint16_t)tcpPort;
0109 + (NetworkPackage *) createPairPackage;
0110 + (nullable NSString *) getUUID;
0111 
0112 - (BOOL)bodyHasKey:(nonnull NSString *)key;
0113 - (void)setBool:(BOOL)value         forKey:(NSString *)key;
0114 - (void)setFloat:(float)value       forKey:(NSString *)key;
0115 - (void)setDouble:(double)value     forKey:(NSString *)key;
0116 - (void)setInteger:(NSInteger)value forKey:(NSString *)key;
0117 - (void)setObject:(id)value         forKey:(NSString *)key;
0118 - (BOOL)boolForKey:(NSString *)key;
0119 - (float)floatForKey:(NSString *)key;
0120 - (double)doubleForKey:(NSString *)key;
0121 - (NSInteger)integerForKey:(NSString *)key;
0122 - (nullable id)objectForKey:(NSString *)key;
0123 
0124 #pragma mark Serialize
0125 - (nullable NSData *) serialize;
0126 + (nullable NetworkPackage *) unserialize:(NSData *)data;
0127 
0128 @end
0129 
0130 NS_ASSUME_NONNULL_END