00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "internal.h"
00024
00025 static int
00026 _gsasl_code (Gsasl_session * sctx,
00027 Gsasl_code_function code,
00028 const char *input, size_t input_len,
00029 char **output, size_t * output_len)
00030 {
00031
00032 if (code == NULL)
00033 {
00034 *output_len = input_len;
00035 *output = malloc (*output_len);
00036 if (!*output)
00037 return GSASL_MALLOC_ERROR;
00038
00039 memcpy (*output, input, input_len);
00040 return GSASL_OK;
00041 }
00042
00043 return code (sctx, sctx->mech_data, input, input_len, output, output_len);
00044 }
00045
00063 int
00064 gsasl_encode (Gsasl_session * sctx,
00065 const char *input, size_t input_len,
00066 char **output, size_t * output_len)
00067 {
00068 Gsasl_code_function code;
00069
00070 if (sctx->clientp)
00071 code = sctx->mech->client.encode;
00072 else
00073 code = sctx->mech->server.encode;
00074
00075 return _gsasl_code (sctx, code, input, input_len, output, output_len);
00076 }
00077
00095 int
00096 gsasl_decode (Gsasl_session * sctx,
00097 const char *input, size_t input_len,
00098 char **output, size_t * output_len)
00099 {
00100 Gsasl_code_function code;
00101
00102 if (sctx->clientp)
00103 code = sctx->mech->client.decode;
00104 else
00105 code = sctx->mech->server.decode;
00106
00107 return _gsasl_code (sctx, code, input, input_len, output, output_len);
00108 }