Exemplo n.º 1
0
        ///////////////////////////////////////////////////////////////////////

#if NETWORK
        public static ReturnCode GetBytesFromList(
            Interpreter interpreter,
            StringList list,
            Encoding encoding,
            ref byte[] bytes,
            ref Result error
            )
        {
            if (list == null)
            {
                error = "invalid list";
                return(ReturnCode.Error);
            }

            if (list.Count == 0)
            {
                bytes = new byte[0];
                return(ReturnCode.Ok);
            }

            if ((list.Count == 1) && (interpreter != null))
            {
                IObject @object = null;

                if (interpreter.GetObject(
                        list[0], LookupFlags.NoVerbose,
                        ref @object) == ReturnCode.Ok)
                {
                    object value = @object.Value;

                    if (value == null)
                    {
                        bytes = null;
                        return(ReturnCode.Ok);
                    }
                    else if (value is byte[])
                    {
                        bytes = (byte[])value;
                        return(ReturnCode.Ok);
                    }
                    else if (value is string)
                    {
                        if (encoding != null)
                        {
                            bytes = encoding.GetBytes((string)value);
                            return(ReturnCode.Ok);
                        }
                        else
                        {
                            error = "invalid encoding";
                            return(ReturnCode.Error);
                        }
                    }
                    else
                    {
                        error = String.Format(
                            "object \"{0}\" type mismatch, have {1}, want {2}",
                            list[0], FormatOps.TypeName(value.GetType()),
                            FormatOps.TypeName(typeof(byte[])));

                        return(ReturnCode.Error);
                    }
                }
            }

            CultureInfo cultureInfo = null;

            if (interpreter != null)
            {
                cultureInfo = interpreter.CultureInfo;
            }

            byte[] localBytes = new byte[list.Count];

            for (int index = 0; index < list.Count; index++)
            {
                if (Value.GetByte2(
                        list[index], ValueFlags.AnyByte,
                        cultureInfo, ref localBytes[index],
                        ref error) != ReturnCode.Ok)
                {
                    error = String.Format(
                        "bad byte value at index {0}: {1}",
                        index, error);

                    return(ReturnCode.Error);
                }
            }

            bytes = localBytes;
            return(ReturnCode.Ok);
        }