Skip to content
Snippets Groups Projects
Commit 29c42e27 authored by rswindell's avatar rswindell
Browse files

MsgBase.get_msg_header() now supports a 3rd optional boolean argument:

expand_fields (default: true), call with this argument set to false to not
create header fields that do not exist in the SMB version of the msg header.
This is required if the script is going to later re-write the header (with
put_msg_header) and avoid a failed write due to an illegal hdr size increase.
parent 0081daa9
No related branches found
No related tags found
No related merge requests found
......@@ -561,6 +561,7 @@ js_get_msg_header(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *
jsint items;
jsval v;
JSBool by_offset=JS_FALSE;
JSBool expand_fields=JS_TRUE;
private_t* p;
*rval = JSVAL_NULL;
......@@ -575,10 +576,19 @@ js_get_msg_header(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *
memset(&msg,0,sizeof(msg));
/* Parse boolean arguments first */
for(n=0;n<argc;n++) {
if(JSVAL_IS_BOOLEAN(argv[n]))
if(!JSVAL_IS_BOOLEAN(argv[n]))
continue;
if(n)
expand_fields=JSVAL_TO_BOOLEAN(argv[n]);
else
by_offset=JSVAL_TO_BOOLEAN(argv[n]);
else if(JSVAL_IS_NUMBER(argv[n])) {
}
/* Now parse message offset/id and get message */
for(n=0;n<argc;n++) {
if(JSVAL_IS_NUMBER(argv[n])) {
if(by_offset) /* Get by offset */
JS_ValueToInt32(cx,argv[n],(int32*)&msg.offset);
else /* Get by number */
......@@ -671,13 +681,17 @@ js_get_msg_header(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *
,STRING_TO_JSVAL(js_str)
,NULL,NULL,JSPROP_ENUMERATE);
if(expand_fields || msg.to_agent)
JS_DefineProperty(cx, hdrobj, "to_agent",INT_TO_JSVAL(msg.to_agent)
,NULL,NULL,JSPROP_ENUMERATE);
if(expand_fields || msg.from_agent)
JS_DefineProperty(cx, hdrobj, "from_agent",INT_TO_JSVAL(msg.from_agent)
,NULL,NULL,JSPROP_ENUMERATE);
if(expand_fields || msg.replyto_agent)
JS_DefineProperty(cx, hdrobj, "replyto_agent",INT_TO_JSVAL(msg.replyto_agent)
,NULL,NULL,JSPROP_ENUMERATE);
if(expand_fields || msg.to_net.type)
JS_DefineProperty(cx, hdrobj, "to_net_type",INT_TO_JSVAL(msg.to_net.type)
,NULL,NULL,JSPROP_ENUMERATE);
if(msg.to_net.type
......@@ -686,6 +700,7 @@ js_get_msg_header(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *
,STRING_TO_JSVAL(js_str)
,NULL,NULL,JSPROP_ENUMERATE);
if(expand_fields || msg.from_net.type)
JS_DefineProperty(cx, hdrobj, "from_net_type",INT_TO_JSVAL(msg.from_net.type)
,NULL,NULL,JSPROP_ENUMERATE);
if(msg.from_net.type
......@@ -694,6 +709,8 @@ js_get_msg_header(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *
,STRING_TO_JSVAL(js_str)
,NULL,NULL,JSPROP_ENUMERATE);
if(expand_fields || msg.replyto_net.type)
JS_DefineProperty(cx, hdrobj, "replyto_net_type",INT_TO_JSVAL(msg.replyto_net.type)
,NULL,NULL,JSPROP_ENUMERATE);
if(msg.replyto_net.type
......@@ -725,16 +742,23 @@ js_get_msg_header(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *
,INT_TO_JSVAL(*port)
,NULL,NULL,JSPROP_ENUMERATE);
if(expand_fields || msg.forwarded)
JS_DefineProperty(cx, hdrobj, "forwarded",INT_TO_JSVAL(msg.forwarded)
,NULL,NULL,JSPROP_ENUMERATE);
if(expand_fields || msg.expiration) {
JS_NewNumberValue(cx,msg.expiration,&v);
JS_DefineProperty(cx, hdrobj, "expiration",v,NULL,NULL,JSPROP_ENUMERATE);
}
if(expand_fields || msg.priority) {
JS_NewNumberValue(cx,msg.priority,&v);
JS_DefineProperty(cx, hdrobj, "priority",v,NULL,NULL,JSPROP_ENUMERATE);
}
if(expand_fields || msg.cost) {
JS_NewNumberValue(cx,msg.cost,&v);
JS_DefineProperty(cx, hdrobj, "cost",v,NULL,NULL,JSPROP_ENUMERATE);
}
/* Fixed length portion of msg header */
JS_DefineProperty(cx, hdrobj, "type", INT_TO_JSVAL(msg.hdr.type)
,NULL,NULL,JSPROP_ENUMERATE);
JS_DefineProperty(cx, hdrobj, "version", INT_TO_JSVAL(msg.hdr.version)
......@@ -783,7 +807,7 @@ js_get_msg_header(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *
val=msg.reply_id;
else {
reply_id[0]=0;
if(msg.hdr.thread_orig) {
if(expand_fields && msg.hdr.thread_orig) {
memset(&orig_msg,0,sizeof(orig_msg));
orig_msg.hdr.number=msg.hdr.thread_orig;
if(smb_getmsgidx(&(p->smb), &orig_msg))
......@@ -799,6 +823,7 @@ js_get_msg_header(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *
,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
/* Message-ID */
if(expand_fields || msg.id!=NULL) {
SAFECOPY(msg_id,get_msgid(scfg,p->smb.subnum,&msg));
val=msg_id;
if((js_str=JS_NewStringCopyZ(cx,truncsp(val)))==NULL)
......@@ -806,6 +831,7 @@ js_get_msg_header(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *
JS_DefineProperty(cx, hdrobj, "id"
,STRING_TO_JSVAL(js_str)
,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
}
/* USENET Fields */
if(msg.path!=NULL
......@@ -1541,8 +1567,10 @@ static jsSyncMethodSpec js_msgbase_functions[] = {
,JSDOCSTR("close message base (if open)")
,310
},
{"get_msg_header", js_get_msg_header, 2, JSTYPE_OBJECT, JSDOCSTR("[boolean by_offset,] number_or_id")
,JSDOCSTR("returns a specific message header, <i>null</i> on failure")
{"get_msg_header", js_get_msg_header, 2, JSTYPE_OBJECT, JSDOCSTR("[boolean by_offset,] number_or_id [,boolean expand_fields]")
,JSDOCSTR("returns a specific message header, <i>null</i> on failure. "
"Pass <i>false</i> for the <i>expand_fields</i> argument (default: <i>true</i>) "
"if you will be re-writing the header later with <i>put_msg_header()</i>")
,310
},
{"put_msg_header", js_put_msg_header, 2, JSTYPE_BOOLEAN, JSDOCSTR("[boolean by_offset,] number, object header")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment