Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117749507
bytecode.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
7 KB
Referenced Files
None
Subscribers
None
bytecode.h
View Options
/* bytecode.h -- bytecode definition
*
* Copyright (c) 1994-2008 Carnegie Mellon University. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The name "Carnegie Mellon University" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For permission or any legal
* details, please contact
* Carnegie Mellon University
* Center for Technology Transfer and Enterprise Creation
* 4615 Forbes Avenue
* Suite 302
* Pittsburgh, PA 15213
* (412) 268-7393, fax: (412) 268-7395
* innovation@andrew.cmu.edu
*
* 4. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by Computing Services
* at Carnegie Mellon University (http://www.cmu.edu/computing/)."
*
* CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
* $Id: bytecode.h,v 1.6 2010/01/06 17:01:59 murch Exp $
*/
#ifndef SIEVE_BYTECODE_H
#define SIEVE_BYTECODE_H
/* for debugging*/
#define DUMPCODE 0
#define VERBOSE 0
/*for finding correctly aligned bytes on strings*/
/* bump to the next multiple of 4 bytes */
#define ROUNDUP(num) (((num) + 3) & 0xFFFFFFFC)
/* yes, lots of these are superfluous, it's for clarity */
typedef
union
{
int
op
;
/* OPTYPE */
int
value
;
int
jump
;
int
listlen
;
/* store strings (need 2 consecutive bytecodes) */
int
len
;
char
*
str
;
}
bytecode_t
;
struct
bytecode_info
{
bytecode_t
*
data
;
/* pointer to almost-flat bytecode */
size_t
scriptend
;
/* used by emit code to know final length of bytecode */
size_t
reallen
;
/* allocated length of 'data' */
};
/* For sanity during input on 64-bit platforms.
* str should only be accessed as (char *)&str, but given the use of
* unwrap_string, this should be OK */
typedef
union
{
int
op
;
/* OPTYPE */
int
value
;
int
jump
;
int
listlen
;
/* store strings (need 2 consecutive bytecodes) */
int
len
;
int
str
;
}
bytecode_input_t
;
/* version 0x01 scripts were written in host byte order.
* we don't want to use this version number again and cause a mess
* this isn't a huge concern, since this is version ntohl(1), or 16777216
*
* version 0x02 scripts started using network byte order (recompile)
* version 0x03 scripts implemented short-circuiting of testlists (recompile)
* version 0x04 scripts implemented BODY, INCLUDE and COPY extensions
* version 0x05 scripts implemented updated VACATION (:from and :handle)
* version 0x06 scripts implemented updated VACATION (:seconds)
*/
#define BYTECODE_VERSION 0x06
#define BYTECODE_MIN_VERSION 0x03
/* minimum supported version */
#define BYTECODE_MAGIC "CyrSBytecode"
#define BYTECODE_MAGIC_LEN 12
/* Should be multiple of 4 */
/* IMPORTANT: To maintain forward compatibility of bytecode, please only add
* new instructions to the end of these enums. (The reason these values
* are all duplicated here is to avoid silliness if this caveat is forgotten
* about in the other tables.) */
enum
bytecode
{
B_STOP
,
B_KEEP
,
B_DISCARD
,
B_REJECT
,
/* require reject */
B_FILEINTO_ORIG
,
/* legacy fileinto w/o support for :copy */
B_REDIRECT_ORIG
,
/* legacy redirect w/o support for :copy */
B_IF
,
B_MARK
,
/* require imapflags */
B_UNMARK
,
/* require imapflags */
B_ADDFLAG
,
/* require imapflags */
B_SETFLAG
,
/* require imapflags */
B_REMOVEFLAG
,
/* require imapflags */
B_NOTIFY
,
/* require notify */
B_DENOTIFY
,
/* require notify */
B_VACATION_ORIG
,
/* legacy vacation w/o support for :seconds */
B_NULL
,
B_JUMP
,
B_INCLUDE
,
/* require include */
B_RETURN
,
/* require include */
B_FILEINTO
,
/* require fileinto */
B_REDIRECT
,
B_VACATION
,
/* require vacation */
};
enum
bytecode_comps
{
BC_FALSE
,
BC_TRUE
,
BC_NOT
,
BC_EXISTS
,
BC_SIZE
,
BC_ANYOF
,
BC_ALLOF
,
BC_ADDRESS
,
BC_ENVELOPE
,
/* require envelope */
BC_HEADER
,
BC_BODY
/* require body */
};
/* currently one enum so as to help determine where values are being misused.
* we have left placeholders incase we need to add more later to the middle */
enum
bytecode_tags
{
/* Size Tests */
B_OVER
,
B_UNDER
,
B_SIZE_PLACEHOLDER_1
,
B_SIZE_PLACEHOLDER_2
,
/* Relational Match Types */
B_GT
,
/* require relational */
B_GE
,
/* require relational */
B_LT
,
/* require relational */
B_LE
,
/* require relational */
B_EQ
,
/* require relational */
B_NE
,
/* require relational */
B_RELATIONAL_PLACEHOLDER_1
,
B_RELATIONAL_PLACEHOLDER_2
,
/* Priorities */
B_LOW
,
/* require notify */
B_NORMAL
,
/* require notify */
B_HIGH
,
/* require notify */
B_ANY
,
/* require notify */
B_PRIORITY_PLACEHOLDER_1
,
B_PRIORITY_PLACEHOLDER_2
,
B_PRIORITY_PLACEHOLDER_3
,
B_PRIORITY_PLACEHOLDER_4
,
/* Address Parts */
B_ALL
,
B_LOCALPART
,
B_DOMAIN
,
B_USER
,
/* require subaddress */
B_DETAIL
,
/* require subaddress */
B_ADDRESS_PLACEHOLDER_1
,
B_ADDRESS_PLACEHOLDER_2
,
B_ADDRESS_PLACEHOLDER_3
,
B_ADDRESS_PLACEHOLDER_4
,
/* Comparators */
B_ASCIICASEMAP
,
B_OCTET
,
B_ASCIINUMERIC
,
/* require comparator-i;ascii-numeric */
B_COMPARATOR_PLACEHOLDER_1
,
B_COMPARATOR_PLACEHOLDER_2
,
B_COMPARATOR_PLACEHOLDER_3
,
B_COMPARATOR_PLACEHOLDER_4
,
/* Match Types */
B_IS
,
B_CONTAINS
,
B_MATCHES
,
B_REGEX
,
/* require regex */
B_COUNT
,
/* require relational */
B_VALUE
,
/* require relational */
B_MATCH_PLACEHOLDER_1
,
B_MATCH_PLACEHOLDER_2
,
B_MATCH_PLACEHOLDER_3
,
B_MATCH_PLACEHOLDER_4
,
/* Body Transforms */
B_RAW
,
/* require body */
B_TEXT
,
/* require body */
B_CONTENT
,
/* require body */
B_TRANSFORM_PLACEHOLDER_1
,
B_TRANSFORM_PLACEHOLDER_2
,
B_TRANSFORM_PLACEHOLDER_3
,
B_TRANSFORM_PLACEHOLDER_4
,
B_TRANSFORM_PLACEHOLDER_5
,
/* Script locations */
B_PERSONAL
,
/* require include */
B_GLOBAL
,
/* require include */
B_LOCATION_PLACEHOLDER_1
,
B_LOCATION_PLACEHOLDER_2
,
B_LOCATION_PLACEHOLDER_3
,
B_LOCATION_PLACEHOLDER_4
};
#endif
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Sat, Apr 4, 1:38 AM (1 w, 5 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18821957
Default Alt Text
bytecode.h (7 KB)
Attached To
Mode
R111 cyrus-imapd
Attached
Detach File
Event Timeline