⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httpform.cxx

📁 mgcp协议源代码。支持多种编码:g711
💻 CXX
📖 第 1 页 / 共 5 页
字号:
static int SplitArraySizeKey(const PString & fullName,                             PString & section, PString & key){  static const char ArraySize[] = "Array Size";  PINDEX pos = fullName.Find("%u");  if (pos == P_MAX_INDEX)    return SplitConfigKey(fullName & ArraySize, section, key);  PINDEX endPos = fullName.GetLength() - 1;  if (fullName[endPos] == '\\')    endPos--;  return SplitConfigKey(fullName.Left(pos) & ArraySize & fullName(pos+2, endPos), section, key);}void PHTTPFieldArray::LoadFromConfig(PConfig & cfg){  PString section, key;  switch (SplitArraySizeKey(fullName, section, key)) {    case 1 :      SetSize(cfg.GetInteger(key, GetSize()));      break;    case 2 :      SetSize(cfg.GetInteger(section, key, GetSize()));  }  PHTTPCompositeField::LoadFromConfig(cfg);}void PHTTPFieldArray::SaveToConfig(PConfig & cfg) const{  PString section, key;  switch (SplitArraySizeKey(fullName, section, key)) {    case 1 :      cfg.SetInteger(key, GetSize());      break;    case 2 :      cfg.SetInteger(section, key, GetSize());  }  PHTTPCompositeField::SaveToConfig(cfg);}void PHTTPFieldArray::SetArrayFieldName(PINDEX idx) const{  PString fmt = fullName;  if (fmt.Find("%u") == P_MAX_INDEX)    fmt += " %u";  fields[idx].SetName(psprintf(fmt, idx+1));}void PHTTPFieldArray::SetAllValues(const PStringToString & data){  PHTTPFieldList newFields;  newFields.DisallowDeleteObjects();  PINDEX i;  for (i = 0; i < fields.GetSize(); i++)    newFields.Append(fields.GetAt(i));  BOOL lastFieldIsSet = FALSE;  PINDEX size = fields.GetSize();  for (i = 0; i < size; i++) {    PHTTPField * fieldPtr = &fields[i];    PINDEX pos = newFields.GetObjectsIndex(fieldPtr);    fieldPtr->SetAllValues(data);    PString control = data(fieldPtr->GetName() + ArrayControlBox);    if (control == ArrayControlMoveUp) {      if (pos > 0) {        newFields.SetAt(pos, newFields.GetAt(pos-1));        newFields.SetAt(pos-1, fieldPtr);      }    }    else if (control == ArrayControlMoveDown) {      if (size > 2 && pos < size-2) {        newFields.SetAt(pos, newFields.GetAt(pos+1));        newFields.SetAt(pos+1, fieldPtr);      }    }    else if (control == ArrayControlToTop) {      newFields.RemoveAt(pos);      newFields.InsertAt(0, fieldPtr);    }    else if (control == ArrayControlToBottom) {      newFields.RemoveAt(pos);      newFields.Append(fieldPtr);    }    else if (control == ArrayControlAddTop) {      if (i == size-1) {        newFields.RemoveAt(pos);        newFields.InsertAt(0, fieldPtr);        lastFieldIsSet = TRUE;      }    }    else if (control == ArrayControlAddBottom || control == ArrayControlAdd) {      if (i == size-1) {        newFields.RemoveAt(pos);        newFields.Append(fieldPtr);        lastFieldIsSet = TRUE;      }    }    else if (control == ArrayControlIgnore) {      newFields.RemoveAt(pos);      newFields.Append(fieldPtr);    }    else if (control == ArrayControlRemove)      newFields.RemoveAt(pos);  }  fields.DisallowDeleteObjects();  for (i = 0; i < newFields.GetSize(); i++)    fields.Remove(newFields.GetAt(i));  fields.AllowDeleteObjects();  fields.RemoveAll();  for (i = 0; i < newFields.GetSize(); i++) {    fields.Append(newFields.GetAt(i));    SetArrayFieldName(i);  }  if (lastFieldIsSet)    AddBlankField();}PINDEX PHTTPFieldArray::GetSize() const{  PAssert(fields.GetSize() > 0, PLogicError);  return fields.GetSize()-1;}void PHTTPFieldArray::AddBlankField(){  fields.Append(baseField->NewField());  SetArrayFieldName(fields.GetSize()-1);}//////////////////////////////////////////////////////////////////////////////// PHTTPStringFieldPHTTPStringField::PHTTPStringField(const char * name,                                   PINDEX siz,                                   const char * initVal,                                   const char * help)  : PHTTPField(name, NULL, help),    value(initVal != NULL ? initVal : ""),    initialValue(value){  size = siz;}PHTTPStringField::PHTTPStringField(const char * name,                                   const char * title,                                   PINDEX siz,                                   const char * initVal,                                   const char * help)  : PHTTPField(name, title, help),    value(initVal != NULL ? initVal : ""),    initialValue(value){  size = siz;}PHTTPField * PHTTPStringField::NewField() const{  return new PHTTPStringField(baseName, title, size, initialValue, help);}void PHTTPStringField::GetHTMLTag(PHTML & html) const{  html << PHTML::InputText(fullName, size, value);}void PHTTPStringField::SetValue(const PString & newVal){  value = newVal;}PString PHTTPStringField::GetValue(BOOL dflt) const{  if (dflt)    return initialValue;  else    return value;}//////////////////////////////////////////////////////////////////////////////// PHTTPPasswordFieldPHTTPPasswordField::PHTTPPasswordField(const char * name,                                       PINDEX siz,                                       const char * initVal,                                       const char * help)  : PHTTPStringField(name, siz, initVal, help){}PHTTPPasswordField::PHTTPPasswordField(const char * name,                                       const char * title,                                       PINDEX siz,                                       const char * initVal,                                       const char * help)  : PHTTPStringField(name, title, siz, initVal, help){}PHTTPField * PHTTPPasswordField::NewField() const{  return new PHTTPPasswordField(baseName, title, size, initialValue, help);}void PHTTPPasswordField::GetHTMLTag(PHTML & html) const{  html << PHTML::InputPassword(fullName, size, value);}static const PTEACypher::Key PasswordKey = {  {    103,  60, 222,  17, 128, 157,  31, 137,    133,  64,  82, 148,  94, 136,   4, 209  }};void PHTTPPasswordField::SetValue(const PString & newVal){  value = Decrypt(newVal);}PString PHTTPPasswordField::GetValue(BOOL dflt) const{  if (dflt)    return initialValue;  PTEACypher crypt(PasswordKey);  return crypt.Encode(value);}PString PHTTPPasswordField::Decrypt(const PString & pword){  PString clear;  PTEACypher crypt(PasswordKey);  return crypt.Decode(pword, clear) ? clear : pword;}//////////////////////////////////////////////////////////////////////////////// PHTTPIntegerFieldPHTTPIntegerField::PHTTPIntegerField(const char * nam,                                     int lo, int hig,                                     int initVal,                                     const char * unit,                                     const char * help)  : PHTTPField(nam, NULL, help), units(unit != NULL ? unit : ""){  low = lo;  high = hig;  value = initialValue = initVal;}PHTTPIntegerField::PHTTPIntegerField(const char * nam,                                     const char * titl,                                     int lo, int hig,                                     int initVal,                                     const char * unit,                                     const char * help)  : PHTTPField(nam, titl, help), units(unit != NULL ? unit : ""){  low = lo;  high = hig;  value = initialValue = initVal;}PHTTPField * PHTTPIntegerField::NewField() const{  return new PHTTPIntegerField(baseName, title, low, high, initialValue, units, help);}void PHTTPIntegerField::GetHTMLTag(PHTML & html) const{  html << PHTML::InputRange(fullName, low, high, value) << "  " << units;}void PHTTPIntegerField::SetValue(const PString & newVal){  value = newVal.AsInteger();}PString PHTTPIntegerField::GetValue(BOOL dflt) const{  return PString(PString::Signed, dflt ? initialValue : value);}void PHTTPIntegerField::LoadFromConfig(PConfig & cfg){  PString section, key;  switch (SplitConfigKey(fullName, section, key)) {    case 1 :      value = cfg.GetInteger(key, initialValue);      break;    case 2 :      value = cfg.GetInteger(section, key, initialValue);  }}void PHTTPIntegerField::SaveToConfig(PConfig & cfg) const{  PString section, key;  switch (SplitConfigKey(fullName, section, key)) {    case 1 :      cfg.SetInteger(key, value);      break;    case 2 :      cfg.SetInteger(section, key, value);  }}BOOL PHTTPIntegerField::Validated(const PString & newVal, PStringStream & msg) const{  int val = newVal.AsInteger();  if (val >= low && val <= high)    return TRUE;  msg << "The field \"" << GetName() << "\" should be between "      << low << " and " << high << ".<BR>";  return FALSE;}//////////////////////////////////////////////////////////////////////////////// PHTTPBooleanFieldPHTTPBooleanField::PHTTPBooleanField(const char * name,                                     BOOL initVal,                                   const char * help)  : PHTTPField(name, NULL, help){  value = initialValue = initVal;}PHTTPBooleanField::PHTTPBooleanField(const char * name,                                     const char * title,                                     BOOL initVal,                                     const char * help)  : PHTTPField(name, title, help){  value = initialValue = initVal;}PHTTPField * PHTTPBooleanField::NewField() const{  return new PHTTPBooleanField(baseName, title, initialValue, help);}void PHTTPBooleanField::GetHTMLTag(PHTML & html) const{  html << PHTML::HiddenField(fullName, "FALSE")       << PHTML::CheckBox(fullName, value ? PHTML::Checked : PHTML::UnChecked);}static void SpliceChecked(PString & text, BOOL value){  PINDEX pos = text.Find("checked");  if (value) {    if (pos == P_MAX_INDEX)      text.Splice(" checked", 6, 0);  }  else {    if (pos != P_MAX_INDEX) {      PINDEX len = 7;      if (text[pos-1] == ' ') {        pos--;        len++;      }      text.Delete(pos, len);    }  }}PString PHTTPBooleanField::GetHTMLInput(const PString & input) const{  static PRegularExpression checkboxRegEx("type[ \t\r\n]*=[ \t\r\n]*\"?checkbox\"?",                                          PRegularExpression::Extended|PRegularExpression::IgnoreCase);  if (input.FindRegEx(checkboxRegEx) != P_MAX_INDEX) {    PCaselessString text;    PINDEX before, after;    if (FindInputValue(input, before, after))       text = input(0, before) + "TRUE" + input.Mid(after);    else      text = "<input value=\"TRUE\"" + input.Mid(6);    SpliceChecked(text, value);    return "<input type=hidden name=\"" + fullName + "\">" + text;  }  static PRegularExpression radioRegEx("type[ \t\r\n]*=[ \t\r\n]*\"?radio\"?",                                       PRegularExpression::Extended|PRegularExpression::IgnoreCase);  if (input.FindRegEx(radioRegEx) != P_MAX_INDEX) {    PINDEX before, after;    if (FindInputValue(input, before, after)) {      PCaselessString text = input;      PString val = input(before+1, after-1);      SpliceChecked(text, (value && (val *= "TRUE")) || (!value && (val *= "FALSE")));      return text;    }    return input;  }  return PHTTPField::GetHTMLInput(input);}void PHTTPBooleanField::SetValue(const PString & val)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -