1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
|
/** Interface for DKMethod class encapsulating D-Bus method information.
Copyright (C) 2010 Free Software Foundation, Inc.
Written by: Niels Grewe <niels.grewe@halbordnung.de>
Created: June 2010
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02111 USA.
<title>DKMethod class reference</title>
*/
#import "DKIntrospectionNode.h"
#include <dbus/dbus.h>
@class NSString, NSMutableArray, NSMethodSignature, DKArgument;
enum
{
DK_ARGUMENT_UNBOXED = 0,
DK_ARGUMENT_BOXED = 1,
DK_ARGUMENT_INVALID = -1
};
/**
* DKMethod provides the infrastructure for using D-Bus methods from
* Objective-C. It can be used to deserialize a DBusMessage into an NSInvocation
* or vice versa.
*/
@interface DKMethod: DKIntrospectionNode
{
NSMutableArray *inArgs;
NSMutableArray *outArgs;
}
/**
* Returns the Objective-C type string the method corresponds to. Use doBox to
* indicate whether the boxed signature is requested.
*/
- (const char*)objCTypesBoxed: (BOOL)doBox;
/**
* Returns the Objective-C type of the return value from this method. Use doBox
* to indicate whether the boxed or non-boxed type signature is requested.
*/
- (const char*) returnTypeBoxed: (BOOL)doBox;
/**
* Returns whether the method signature sig matches the signature for this
* method. Use isBoxed to indicate whether you are interested in the boxed or
* non-boxed case.
*/
- (BOOL) isEqualToMethodSignature: (NSMethodSignature*)sig
boxed: (BOOL)isBoxed;
/**
* Checks whether it is valid to use the receiver to handle an invocation with
* the specified method signature, no matter whether the boxed or non-boxed
* version of an argument is used.
*/
- (BOOL) isValidForMethodSignature: (NSMethodSignature*)aSignature;
/**
* Returns the method signature that the Objective-C type system will use to
* construct invocations for this method. This will be the boxed representation
* by default.
*/
- (NSMethodSignature*) methodSignature;
/**
* DKMethods can return two distinct method signatures: One for the completely
* boxed variant where every D-Bus type will be boxed by an equivalent class on
* the Objective-C side. The other with minimal boxing (only variable/containar
* types will be boxed) will return the plain C types corresponding to the D-Bus
* types. If you want that variant. Pass NO for the doBox argument.
*/
- (NSMethodSignature*) methodSignatureBoxed: (BOOL)doBox;
/**
* Returns the DKArgument at the specific index. Positive integers denote input
* arugments, negative integers denote output arguments (offset by one).
*/
- (DKArgument*)DKArgumentAtIndex: (NSInteger)index;
/**
* Returns the interface associated with the methods.
*/
- (NSString*) interface;
/**
* Returns whether a reply is expected for this message.
*/
- (BOOL) isOneway;
/**
* Returns whether D-Bus metadata indicates that the method has been deprecated.
*/
- (BOOL) isDeprecated;
/**
* Returns an Objective-C method declaration for the D-Bus method.
*/
- (NSString*)methodDeclaration;
/**
* Returns a string that can be use as a Objective-C selector for the method.
*/
- (NSString*)selectorString;
/**
* Adds an argument specification to the method.
*/
- (void) addArgument: (DKArgument*)arg
direction: (NSString*)direction;
/**
* Deserializes the appropriate values from the message iterator and places them
* in the invocation. Use type to indicate whether this is done for an method
* call or method return and doBox to indicate whether the values should or
* should not be boxed.
*/
- (void) unmarshallFromIterator: (DBusMessageIter*)iter
intoInvocation: (NSInvocation*)inv
messageType: (int)type;
/**
* Serializes the appropriate values from the invocation and appends them using
* the message iterator. Use type to indicate whether this is done for an method
* call or method return and doBox to indicate whether the values should or
* should not be boxed.
*/
- (void)marshallFromInvocation: (NSInvocation*)inv
intoIterator: (DBusMessageIter*)iter
messageType: (int)type;
/**
* Determines whether the argument at <var>argIndex</var> corresponds to the
* boxed/non-boxed type of the argument at <var>sigIndex</var> in
* <var>aSignature</var>.
*/
- (NSInteger)boxingStateForArgumentAtIndex: (NSUInteger)argIndex
fromMethodSignature: (NSMethodSignature*)aSignature
atIndex: (NSUInteger)sigIndex;
/**
* Use this method to determine whether the return value type of
* <var>aSignature</var> corresponds boxed or unboxed to the out-arguments of
* the receiver.
*/
- (NSInteger)boxingStateForReturnValueFromMethodSignature: (NSMethodSignature*)aSignature;
@end
|