|
|
1.1 ! root 1: /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- ! 2: * ! 3: * The contents of this file are subject to the Netscape Public ! 4: * License Version 1.1 (the "License"); you may not use this file ! 5: * except in compliance with the License. You may obtain a copy of ! 6: * the License at http://www.mozilla.org/NPL/ ! 7: * ! 8: * Software distributed under the License is distributed on an "AS ! 9: * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or ! 10: * implied. See the License for the specific language governing ! 11: * rights and limitations under the License. ! 12: * ! 13: * The Original Code is Mozilla Communicator client code, released ! 14: * March 31, 1998. ! 15: * ! 16: * The Initial Developer of the Original Code is Netscape ! 17: * Communications Corporation. Portions created by Netscape are ! 18: * Copyright (C) 1998 Netscape Communications Corporation. All ! 19: * Rights Reserved. ! 20: * ! 21: * Contributor(s): ! 22: * ! 23: * Alternatively, the contents of this file may be used under the ! 24: * terms of the GNU Public License (the "GPL"), in which case the ! 25: * provisions of the GPL are applicable instead of those above. ! 26: * If you wish to allow use of your version of this file only ! 27: * under the terms of the GPL and not to allow others to use your ! 28: * version of this file under the NPL, indicate your decision by ! 29: * deleting the provisions above and replace them with the notice ! 30: * and other provisions required by the GPL. If you do not delete ! 31: * the provisions above, a recipient may use your version of this ! 32: * file under either the NPL or the GPL. ! 33: */ ! 34: ! 35: #ifndef jsxdrapi_h___ ! 36: #define jsxdrapi_h___ ! 37: ! 38: /* ! 39: * JS external data representation interface API. ! 40: * ! 41: * The XDR system is comprised of three major parts: ! 42: * ! 43: * - the state serialization/deserialization APIs, which allow consumers ! 44: * of the API to serialize JS runtime state (script bytecodes, atom maps, ! 45: * object graphs, etc.) for later restoration. These portions ! 46: * are implemented in various appropriate files, such as jsscript.c ! 47: * for the script portions and jsobj.c for object state. ! 48: * - the callback APIs through which the runtime requests an opaque ! 49: * representation of a native object, and through which the runtime ! 50: * constructs a live native object from an opaque representation. These ! 51: * portions are the responsibility of the native object implementor. ! 52: * - utility functions for en/decoding of primitive types, such as ! 53: * JSStrings. This portion is implemented in jsxdrapi.c. ! 54: * ! 55: * Spiritually guided by Sun's XDR, where appropriate. ! 56: */ ! 57: ! 58: #include "jspubtd.h" ! 59: #include "jsprvtd.h" ! 60: ! 61: JS_BEGIN_EXTERN_C ! 62: ! 63: /* We use little-endian byteorder for all encoded data */ ! 64: ! 65: #if defined IS_LITTLE_ENDIAN ! 66: #define JSXDR_SWAB32(x) x ! 67: #define JSXDR_SWAB16(x) x ! 68: #elif defined IS_BIG_ENDIAN ! 69: #define JSXDR_SWAB32(x) (((uint32)(x) >> 24) | \ ! 70: (((uint32)(x) >> 8) & 0xff00) | \ ! 71: (((uint32)(x) << 8) & 0xff0000) | \ ! 72: ((uint32)(x) << 24)) ! 73: #define JSXDR_SWAB16(x) (((uint16)(x) >> 8) | ((uint16)(x) << 8)) ! 74: #else ! 75: #error "unknown byte order" ! 76: #endif ! 77: ! 78: #define JSXDR_ALIGN 4 ! 79: ! 80: typedef enum JSXDRMode { ! 81: JSXDR_ENCODE, ! 82: JSXDR_DECODE, ! 83: JSXDR_FREE ! 84: } JSXDRMode; ! 85: ! 86: typedef enum JSXDRWhence { ! 87: JSXDR_SEEK_SET, ! 88: JSXDR_SEEK_CUR, ! 89: JSXDR_SEEK_END ! 90: } JSXDRWhence; ! 91: ! 92: typedef struct JSXDROps { ! 93: JSBool (*get32)(JSXDRState *, uint32 *); ! 94: JSBool (*set32)(JSXDRState *, uint32 *); ! 95: JSBool (*getbytes)(JSXDRState *, char *, uint32); ! 96: JSBool (*setbytes)(JSXDRState *, char *, uint32); ! 97: void * (*raw)(JSXDRState *, uint32); ! 98: JSBool (*seek)(JSXDRState *, int32, JSXDRWhence); ! 99: uint32 (*tell)(JSXDRState *); ! 100: void (*finalize)(JSXDRState *); ! 101: } JSXDROps; ! 102: ! 103: struct JSXDRState { ! 104: JSXDRMode mode; ! 105: JSXDROps *ops; ! 106: JSContext *cx; ! 107: JSClass **registry; ! 108: uintN numclasses; ! 109: uintN maxclasses; ! 110: void *reghash; ! 111: void *userdata; ! 112: }; ! 113: ! 114: extern JS_PUBLIC_API(void) ! 115: JS_XDRInitBase(JSXDRState *xdr, JSXDRMode mode, JSContext *cx); ! 116: ! 117: extern JS_PUBLIC_API(JSXDRState *) ! 118: JS_XDRNewMem(JSContext *cx, JSXDRMode mode); ! 119: ! 120: extern JS_PUBLIC_API(void *) ! 121: JS_XDRMemGetData(JSXDRState *xdr, uint32 *lp); ! 122: ! 123: extern JS_PUBLIC_API(void) ! 124: JS_XDRMemSetData(JSXDRState *xdr, void *data, uint32 len); ! 125: ! 126: extern JS_PUBLIC_API(uint32) ! 127: JS_XDRMemDataLeft(JSXDRState *xdr); ! 128: ! 129: extern JS_PUBLIC_API(void) ! 130: JS_XDRMemResetData(JSXDRState *xdr); ! 131: ! 132: extern JS_PUBLIC_API(void) ! 133: JS_XDRDestroy(JSXDRState *xdr); ! 134: ! 135: extern JS_PUBLIC_API(JSBool) ! 136: JS_XDRUint8(JSXDRState *xdr, uint8 *b); ! 137: ! 138: extern JS_PUBLIC_API(JSBool) ! 139: JS_XDRUint16(JSXDRState *xdr, uint16 *s); ! 140: ! 141: extern JS_PUBLIC_API(JSBool) ! 142: JS_XDRUint32(JSXDRState *xdr, uint32 *lp); ! 143: ! 144: extern JS_PUBLIC_API(JSBool) ! 145: JS_XDRBytes(JSXDRState *xdr, char *bytes, uint32 len); ! 146: ! 147: extern JS_PUBLIC_API(JSBool) ! 148: JS_XDRCString(JSXDRState *xdr, char **sp); ! 149: ! 150: extern JS_PUBLIC_API(JSBool) ! 151: JS_XDRCStringOrNull(JSXDRState *xdr, char **sp); ! 152: ! 153: extern JS_PUBLIC_API(JSBool) ! 154: JS_XDRString(JSXDRState *xdr, JSString **strp); ! 155: ! 156: extern JS_PUBLIC_API(JSBool) ! 157: JS_XDRStringOrNull(JSXDRState *xdr, JSString **strp); ! 158: ! 159: extern JS_PUBLIC_API(JSBool) ! 160: JS_XDRDouble(JSXDRState *xdr, jsdouble **dp); ! 161: ! 162: extern JS_PUBLIC_API(JSBool) ! 163: JS_XDRValue(JSXDRState *xdr, jsval *vp); ! 164: ! 165: extern JS_PUBLIC_API(JSBool) ! 166: JS_XDRScript(JSXDRState *xdr, JSScript **scriptp); ! 167: ! 168: extern JS_PUBLIC_API(JSBool) ! 169: JS_XDRRegisterClass(JSXDRState *xdr, JSClass *clasp, uint32 *lp); ! 170: ! 171: extern JS_PUBLIC_API(uint32) ! 172: JS_XDRFindClassIdByName(JSXDRState *xdr, const char *name); ! 173: ! 174: extern JS_PUBLIC_API(JSClass *) ! 175: JS_XDRFindClassById(JSXDRState *xdr, uint32 id); ! 176: ! 177: /* ! 178: * Magic numbers. ! 179: */ ! 180: #define JSXDR_MAGIC_SCRIPT_1 0xdead0001 ! 181: #define JSXDR_MAGIC_SCRIPT_2 0xdead0002 ! 182: #define JSXDR_MAGIC_SCRIPT_3 0xdead0003 ! 183: #define JSXDR_MAGIC_SCRIPT_4 0xdead0004 ! 184: #define JSXDR_MAGIC_SCRIPT_CURRENT JSXDR_MAGIC_SCRIPT_4 ! 185: ! 186: JS_END_EXTERN_C ! 187: ! 188: #endif /* ! jsxdrapi_h___ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.