Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F34625114
mimeenig.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
4 KB
Subscribers
None
mimeenig.cpp
View Options
#define MOZILLA_INTERNAL_API
#include
"mimecth.h"
#include
"mimemoz2.h"
#include
"mimeenig.h"
#include
"nsCRT.h"
#include
"nspr.h"
#include
"plstr.h"
#include
"nsCOMPtr.h"
#include
"nsIURI.h"
#include
"nsIMsgMailNewsUrl.h"
#include
"nsIMsgWindow.h"
#include
"nsIEnigMimeDecrypt.h"
/* Set superclass to NULL and initialize by hand later */
MimeDefClass
(
MimeEncryptedEnig
,
MimeEncryptedEnigClass
,
mimeEncryptedEnigClass
,
NULL
);
static
void
*
MimeEnig_init
(
MimeObject
*
,
int
(
*
output_fn
)
(
const
char
*
,
PRInt32
,
void
*
),
void
*
);
static
int
MimeEnig_write
(
const
char
*
,
PRInt32
,
void
*
);
static
int
MimeEnig_eof
(
void
*
,
PRBool
);
static
char
*
MimeEnig_generate
(
void
*
);
static
void
MimeEnig_free
(
void
*
);
// TEMPORARY; MOVE TO CLASS LATER
nsCOMPtr
<
nsIEnigMimeDecrypt
>
mMimeDecrypt
;
static
int
MimeEncryptedEnigClassInitialize
(
MimeEncryptedEnigClass
*
clazz
)
{
MimeObjectClass
*
oclass
=
(
MimeObjectClass
*
)
clazz
;
MimeEncryptedClass
*
eclass
=
(
MimeEncryptedClass
*
)
clazz
;
PR_ASSERT
(
!
oclass
->
class_initialized
);
eclass
->
crypto_init
=
MimeEnig_init
;
eclass
->
crypto_write
=
MimeEnig_write
;
eclass
->
crypto_eof
=
MimeEnig_eof
;
eclass
->
crypto_generate_html
=
MimeEnig_generate
;
eclass
->
crypto_free
=
MimeEnig_free
;
return
0
;
}
typedef
struct
MimeEnigData
{
int
(
*
output_fn
)
(
const
char
*
buf
,
PRInt32
buf_size
,
void
*
output_closure
);
void
*
output_closure
;
MimeObject
*
self
;
nsCOMPtr
<
nsIEnigMimeDecrypt
>
mimeDecrypt
;
MimeEnigData
()
:
output_fn
(
nsnull
),
output_closure
(
nsnull
)
{
}
~
MimeEnigData
()
{
mimeDecrypt
=
nsnull
;
}
}
MimeEnigData
;
static
void
*
MimeEnig_init
(
MimeObject
*
obj
,
int
(
*
output_fn
)
(
const
char
*
buf
,
PRInt32
buf_size
,
void
*
output_closure
),
void
*
output_closure
)
{
MimeEnigData
*
data
;
MimeDisplayOptions
*
opts
;
fprintf
(
stderr
,
"MimeEnig_init:
\n
"
);
if
(
!
(
obj
&&
obj
->
options
&&
output_fn
))
return
NULL
;
opts
=
obj
->
options
;
data
=
new
MimeEnigData
;
if
(
!
data
)
return
NULL
;
data
->
self
=
obj
;
data
->
output_fn
=
output_fn
;
data
->
output_closure
=
output_closure
;
// Enigmail stuff
nsresult
rv
;
data
->
mimeDecrypt
=
do_CreateInstance
(
NS_ENIGMIMEDECRYPT_CONTRACTID
,
&
rv
);
if
(
NS_FAILED
(
rv
))
return
NULL
;
PRBool
verifyOnly
=
PR_FALSE
;
PRBool
rfc2015
=
PR_TRUE
;
rv
=
data
->
mimeDecrypt
->
Init
(
verifyOnly
,
rfc2015
,
output_fn
,
output_closure
);
if
(
NS_FAILED
(
rv
))
return
NULL
;
return
data
;
}
static
int
MimeEnig_write
(
const
char
*
buf
,
PRInt32
buf_size
,
void
*
output_closure
)
{
MimeEnigData
*
data
=
(
MimeEnigData
*
)
output_closure
;
if
(
!
data
||
!
data
->
output_fn
)
return
-1
;
//nsCAutoString temStr(buf, buf_size);
//fprintf(stderr, "MimeEnig_write:: aBuf='%s'\n", temStr.get());
// Enigmail stuff
if
(
!
data
->
mimeDecrypt
)
return
-1
;
nsresult
rv
;
rv
=
data
->
mimeDecrypt
->
Write
(
buf
,
buf_size
);
if
(
NS_FAILED
(
rv
))
return
-1
;
return
0
;
}
static
int
MimeEnig_eof
(
void
*
output_closure
,
PRBool
abort_p
)
{
MimeEnigData
*
data
=
(
MimeEnigData
*
)
output_closure
;
fprintf
(
stderr
,
"MimeEnig_eof:
\n
"
);
if
(
!
data
||
!
data
->
output_fn
)
{
return
-1
;
}
if
(
0
)
{
// TEST OUTPUT
const
char
content
[]
=
"content-type: multipart/mixed; boundary=
\"
ABCD
\"\r\n\r\n
multipart
\r\n
--ABCD
\r\n
content-type: text/html
\r\n\r\n
<html><body><b>TEST CONTENT1<b></body></html>
\r\n\r\n
--ABCD
\r\n
content-type: text/plain
\r\n
content-disposition: attachment; filename=
\"
abcd.txt
\"\r\n\r\n
FILE CONTENTS
\r\n
--ABCD--
\r\n
"
;
PR_SetError
(
0
,
0
);
int
status
=
data
->
output_fn
(
content
,
strlen
(
content
),
data
->
output_closure
);
if
(
status
<
0
)
{
PR_SetError
(
status
,
0
);
data
->
output_fn
=
0
;
return
-1
;
}
return
0
;
}
// Enigmail stuff
if
(
!
data
->
mimeDecrypt
)
return
-1
;
mime_stream_data
*
msd
=
(
mime_stream_data
*
)
(
data
->
self
->
options
->
stream_closure
);
nsCOMPtr
<
nsIURI
>
uri
;
nsCOMPtr
<
nsIMsgWindow
>
msgWindow
;
if
(
msd
&&
msd
->
channel
)
{
nsIChannel
*
channel
=
msd
->
channel
;
if
(
channel
)
channel
->
GetURI
(
getter_AddRefs
(
uri
));
nsCOMPtr
<
nsIMsgMailNewsUrl
>
msgUrl
;
if
(
uri
)
msgUrl
=
do_QueryInterface
(
uri
);
if
(
msgUrl
)
msgUrl
->
GetMsgWindow
(
getter_AddRefs
(
msgWindow
));
}
nsresult
rv
;
rv
=
data
->
mimeDecrypt
->
Finish
(
msgWindow
,
uri
);
if
(
NS_FAILED
(
rv
))
return
-1
;
data
->
mimeDecrypt
=
nsnull
;
return
0
;
}
static
char
*
MimeEnig_generate
(
void
*
output_closure
)
{
fprintf
(
stderr
,
"MimeEnig_generate:
\n
"
);
const
char
htmlMsg
[]
=
"<html><body><b>GEN MSG<b></body></html>"
;
char
*
msg
=
(
char
*
)
PR_MALLOC
(
strlen
(
htmlMsg
)
+
1
);
if
(
msg
)
{
PL_strcpy
(
msg
,
htmlMsg
);
}
return
msg
;
}
static
void
MimeEnig_free
(
void
*
output_closure
)
{
fprintf
(
stderr
,
"MimeEnig_free:
\n
"
);
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Tue, Jan 20, 6:52 AM (1 d, 10 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
66/6d/a910de84bb3afacb2afb4337f109
Attached To
rENIG Enigmail
Event Timeline
Log In to Comment