Example #1
0
 static extern void linphone_core_set_log_level(OrtpLogLevel loglevel);
        private void OnLinphoneLog(IntPtr domain, OrtpLogLevel lev, IntPtr fmt, IntPtr args)
        {
            if (fmt == IntPtr.Zero || !_enableLogging)
                return;
            var format  = Marshal.PtrToStringAnsi(fmt);
            if (string.IsNullOrEmpty(format))
            {
                return;
            }
            lock (logLock)
            {
                try
                {
                    foreach (var formatter in placeholders)
                    {
                        int pos = format.IndexOf(formatter, 0, StringComparison.InvariantCulture);
                        while (pos != -1)
                        {
                            placeHolderItems[pos] = formatter;
                            pos = format.IndexOf(formatter, pos + 1, StringComparison.InvariantCulture);
                        }
                    }
                }
                catch (Exception ex)
                {
                    LOG.Error("Error on formatting: " + format);
                    return;
                }

                if (placeHolderItems.Count == 0)
                {
                    LOG.Info(format);
                    return;
                }

                try
                {
                    var argsArray = new IntPtr[placeHolderItems.Count];

                    Marshal.Copy(args, argsArray, 0, placeHolderItems.Count);
                    var logOutput = new StringBuilder(format);
                    var formattedString = string.Empty;
                    int offset = 0;
                    for (int i = 0; i < placeHolderItems.Count; i++)
                    {
                        if (i >= argsArray.Length)
                            continue;
                        switch (placeHolderItems.Values[i])
                        {
                            case "%s":
                                formattedString = Marshal.PtrToStringAnsi(argsArray[i]);
                                break;
                            case "%d":
                            case "%lu":
                            case "%i":
                            case "%u":
                            case "%llu":
                            case "%f":
                            case "%p":
                                formattedString = argsArray[i].ToString();
                                break;
                            case "%x":
                            case "%X":
                                formattedString = argsArray[i].ToString("X");
                                break;
                            case "%10I64d":
                                formattedString = argsArray[i].ToInt64().ToString().PadLeft(10);
                                break;
                            case "%-9i":
                                formattedString = argsArray[i].ToString().PadLeft(9, '-');
                                break;
                            case "%-20s":
                            case "%-19s":
                                formattedString = Marshal.PtrToStringAnsi(argsArray[i]);
                                if (formattedString != null)
                                    formattedString = formattedString.PadLeft(19, '-');
                                break;
                            case "%-19g":
                                formattedString = argsArray[i].ToString().PadLeft(19, '-');
                                break;
                            case "%-10g":
                                formattedString = argsArray[i].ToString().PadLeft(10, '-');
                                break;
                            case "%3.1f":
                            case "%5.1f":
                                formattedString = argsArray[i].ToString("N1");
                                break;

                            default:
                                formattedString = string.Empty;
                                break;
                        }
                        if (formattedString != null)
                        {
                            logOutput.Remove(placeHolderItems.Keys[i] + offset, placeHolderItems.Values[i].Length);
                            if (formattedString.Length > 0)
                                logOutput.Insert(placeHolderItems.Keys[i] + offset, formattedString);

                            // update offset
                            offset += formattedString.Length - placeHolderItems.Values[i].Length;
                        }
                    }

                    LOG.Info(logOutput);
                }
                catch (Exception ex)
                {

                }
                finally
                {
                    placeHolderItems.Clear();
                }
            }
        }
Example #3
0
 public static extern void linphone_core_set_log_level_mask(OrtpLogLevel loglevel);